Як можна вилучити пробіли з заголовків Pandas DataFrame?


94

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

Коли я перевіряю стовпці отриманого фрейму даних df.columns, я бачу:

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

Отже, я не можу зробити:

df["Month"]

Тому що це скаже мені, що стовпець не знайдений, тому що я просив "Місяць", а не "Місяць".

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

Відповіді:


136

Ви можете надати функції 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]

Примітка : це повертає DataFrameоб'єкт, і він відображається як вихід на екран, але зміни насправді не встановлені у ваших стовпцях. Щоб зміни відбулися, використовуйте:

  1. Використовуйте inplace=Trueаргумент [docs]
df.rename(columns=lambda x: x.strip(), inplace=True)
  1. Призначте його назад до вашої dfзмінної:
df = df.rename(columns=lambda x: x.strip())

63

Тепер ви можете просто зателефонувати .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


8

Якщо ви використовуєте формат CSV для експорту з Excel і читаєте як Pandas DataFrame, ви можете вказати:

skipinitialspace=True

при дзвінку pd.read_csv.

З документації :

skipinitialspace: bool, за замовчуванням False

Skip spaces after delimiter.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.