Pandas DataFrame 헤더에서 공백을 제거하려면 어떻게해야합니까?


96

일부 열 머리글에 추가 공백이있는 Excel 파일의 데이터를 구문 분석하고 있습니다.

를 사용하여 결과 데이터 프레임의 열을 확인하면 df.columns다음을 볼 수 있습니다.

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

결과적으로 다음을 수행 할 수 없습니다.

df["Month"]

"Month"가 아니라 "Month"를 요청했듯이 열을 찾을 수 없다는 것을 알려주기 때문입니다.

내 질문은 열 머리글에서 원하지 않는 공백을 어떻게 제거 할 수 있습니까?

답변:


142

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())

64

.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~ 2X 더 빠릅니다. 더 큰 dfs에서 더 잘 확장 될 것으로 예상합니다.


9

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.