Как я могу удалить пробелы из заголовков фреймов данных Pandas?


Я анализирую данные из файла Excel, в некоторых заголовках столбцов которого есть лишние пробелы.

Когда я проверяю столбцы результирующего фрейма данных, например:

df.columns

Результат выглядит так:

Index(['Year', 'Month ', 'Value'])

Следовательно, я не могу бежать

df["Month"]

Потому что он скажет мне, что столбец не найден, так как я просил "месяц", а не "месяц ".

Мой вопрос, таким образом, заключается в том, как я могу удалить ненужное белое пространство из столбца заголовки?

2   42  

2 ответа:

Вы можете дать функции методу rename. Метод str.strip() должен делать то, что вы хотите.

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]

Теперь вы можете просто позвонить .str.strip в колонках, если вы используете последнюю версию:

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']

Тайминги

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

Так что str.strip ~2 раза быстрее, я ожидаю, что это будет масштабироваться лучше для больших dfs