Come posso rimuovere lo spazio bianco dalle intestazioni di Pandas DataFrame?


94

Sto analizzando i dati da un file Excel che ha uno spazio bianco aggiuntivo in alcune delle intestazioni di colonna.

Quando controllo le colonne del dataframe risultante, con df.columns, vedo:

Index(['Year', 'Month ', 'Value'])
                     ^
#                    Note the unwanted trailing space on 'Month '

Di conseguenza, non posso fare:

df["Month"]

Perché mi dirà che la colonna non è stata trovata, poiché ho chiesto "Mese", non "Mese".

La mia domanda, quindi, è come posso eliminare lo spazio bianco indesiderato dalle intestazioni delle colonne?

Risposte:


136

Puoi dare funzioni al renamemetodo. Il str.strip()metodo dovrebbe fare quello che vuoi.

In [5]: df
Out[5]: 
   Year  Month   Value
0     1       2      3

[1 rows x 3 columns]

In [6]: df.rename(columns=lambda x: x.strip())
Out[6]: 
   Year  Month  Value
0     1      2      3

[1 rows x 3 columns]

Nota : questo restituisce un DataFrameoggetto e viene mostrato come output sullo schermo, ma le modifiche non sono effettivamente impostate sulle colonne. Per apportare le modifiche, utilizzare:

  1. Utilizza l' inplace=Trueargomento [docs]
df.rename(columns=lambda x: x.strip(), inplace=True)
  1. Assegnalo di nuovo alla tua dfvariabile:
df = df.rename(columns=lambda x: x.strip())

63

Ora puoi semplicemente chiamare .str.striple colonne se stai utilizzando una versione recente:

In [5]:
df = pd.DataFrame(columns=['Year', 'Month ', 'Value'])
print(df.columns.tolist())
df.columns = df.columns.str.strip()
df.columns.tolist()

['Year', 'Month ', 'Value']
Out[5]:
['Year', 'Month', 'Value']

Tempistiche

In[26]:
df = pd.DataFrame(columns=[' year', ' month ', ' day', ' asdas ', ' asdas', 'as ', '  sa', ' asdas '])
df
Out[26]: 
Empty DataFrame
Columns: [ year,  month ,  day,  asdas ,  asdas, as ,   sa,  asdas ]


%timeit df.rename(columns=lambda x: x.strip())
%timeit df.columns.str.strip()
1000 loops, best of 3: 293 µs per loop
10000 loops, best of 3: 143 µs per loop

Quindi str.stripè ~ 2 volte più veloce, mi aspetto che sia scalabile meglio per dfs più grandi


8

Se utilizzi il formato CSV per esportare da Excel e leggi come Pandas DataFrame, puoi specificare:

skipinitialspace=True

quando si chiama pd.read_csv.

Dalla documentazione :

skipinitialspace: bool, default False

Skip spaces after delimiter.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.