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引数を使用する[ドキュメント]
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倍高速になります。これは、大きなdfの場合、より適切にスケーリングされることを期待しています


8

CSV形式を使用してExcelからエクスポートし、Pandas DataFrameとして読み取る場合は、以下を指定できます。

skipinitialspace=True

呼び出すときpd.read_csv

ドキュメントから:

skipinitialspace:bool、デフォルトはFalse

Skip spaces after delimiter.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.