Làm cách nào để loại bỏ khoảng trắng khỏi tiêu đề Pandas DataFrame?


94

Tôi đang phân tích dữ liệu từ một tệp Excel có thêm khoảng trắng trong một số tiêu đề cột.

Khi tôi kiểm tra các cột của khung dữ liệu kết quả, với df.columns, tôi thấy:

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

Do đó, tôi không thể làm:

df["Month"]

Bởi vì nó sẽ cho tôi biết cột không được tìm thấy, vì tôi đã yêu cầu "Tháng", không phải "Tháng".

Sau đó, câu hỏi của tôi là làm cách nào để loại bỏ khoảng trắng không mong muốn khỏi các tiêu đề cột?

Câu trả lời:


136

Bạn có thể cung cấp các chức năng cho renamephương thức. Các str.strip()phương pháp nên làm những gì bạn muốn.

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]

Lưu ý : điều này trả về một DataFrameđối tượng và nó được hiển thị dưới dạng đầu ra trên màn hình, nhưng các thay đổi không thực sự được đặt trên các cột của bạn. Để thực hiện các thay đổi, hãy sử dụng:

  1. Sử dụng inplace=Trueđối số [docs]
df.rename(columns=lambda x: x.strip(), inplace=True)
  1. Gán lại nó cho dfbiến của bạn :
df = df.rename(columns=lambda x: x.strip())

63

Bây giờ bạn có thể chỉ cần gọi .str.stripcác cột nếu bạn đang sử dụng phiên bản gần đây:

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

Thời gian

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

Vì vậy, str.stripnhanh hơn ~ 2 lần, tôi hy vọng điều này sẽ mở rộng quy mô tốt hơn cho các dfs lớn hơn


8

Nếu bạn sử dụng định dạng CSV để xuất từ ​​Excel và đọc dưới dạng Pandas DataFrame, bạn có thể chỉ định:

skipinitialspace=True

khi gọi điện pd.read_csv.

Từ tài liệu :

jumpinitialspace: bool, mặc định là Sai

Skip spaces after delimiter.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.