Làm cách nào để tạo tiêu đề cột khung dữ liệu gấu trúc tất cả đều là chữ thường?


96

Tôi muốn đặt tất cả các tiêu đề cột trong khung dữ liệu gấu trúc của mình là chữ thường

Thí dụ

Nếu tôi có:

data =

  country country isocode  year     XRAT          tcgdp
0  Canada             CAN  2001  1.54876   924909.44207
1  Canada             CAN  2002  1.56932   957299.91586
2  Canada             CAN  2003  1.40105  1016902.00180
....

Tôi muốn đổi XRAT thành xrat bằng cách làm như sau:

data.headers.lowercase()

Vì vậy, tôi nhận được:

  country country isocode  year     xrat          tcgdp
0  Canada             CAN  2001  1.54876   924909.44207
1  Canada             CAN  2002  1.56932   957299.91586
2  Canada             CAN  2003  1.40105  1016902.00180
3  Canada             CAN  2004  1.30102  1096000.35500
....

Tôi sẽ không biết tên của mỗi tiêu đề cột trước thời hạn.


10
Hơn đơn giản nhấtdf.columns = df.columns.str.lower()
Alex Montoya

Câu trả lời:


174

Bạn có thể làm như thế này:

data.columns = map(str.lower, data.columns)

hoặc là

data.columns = [x.lower() for x in data.columns]

thí dụ:

>>> data = pd.DataFrame({'A':range(3), 'B':range(3,0,-1), 'C':list('abc')})
>>> data
   A  B  C
0  0  3  a
1  1  2  b
2  2  1  c
>>> data.columns = map(str.lower, data.columns)
>>> data
   a  b  c
0  0  3  a
1  1  2  b
2  2  1  c

7
Lưu ý rằng điều này có thể dẫn đến trùng lặp tên cột khi thấp hơn (cột1) == thấp hơn (cột2) (ví dụ: 'a' và 'A'). Điều này có thể gây ra hậu quả không mong muốn khi tham chiếu các cột sau này. (ví dụ: data ['a'] sẽ trả về DataFrame, không phải Chuỗi, với tất cả các cột có tên là 'a'). Xem ý chính này cho một ví dụ: gist.github.com/grisaitis/170e82a008480acb4fa3
grisaitis

1
[x.lower() for x in data.columns]tương đương với:[x.lower() for x in data]
joctee 19/02/1918

Trong khi bạn đang ở đó, nó là tốt để sử dụng[x.lower().strip() for x in df0]
Pawel Kranzberg

@PawelKranzberg Đỗ bạn có bất kỳ ý tưởng làm thế nào để giảm các tên cột củaMultiIndex
curious_nustian

1
@curious_nustian - Có, ví dụ:df.index.names = [x.lower().strip() for x in df.index.names]
Pawel Kranzberg

99

Bạn có thể làm điều đó một cách dễ dàng với str.lowercho columns:

df.columns = df.columns.str.lower()

Thí dụ:

In [63]: df
Out[63]: 
  country country isocode  year     XRAT         tcgdp
0  Canada             CAN  2001  1.54876  9.249094e+05
1  Canada             CAN  2002  1.56932  9.572999e+05
2  Canada             CAN  2003  1.40105  1.016902e+06

In [64]: df.columns = df.columns.str.lower()

In [65]: df
Out[65]: 
  country country isocode  year     xrat         tcgdp
0  Canada             CAN  2001  1.54876  9.249094e+05
1  Canada             CAN  2002  1.56932  9.572999e+05
2  Canada             CAN  2003  1.40105  1.016902e+06

19

Nếu bạn muốn đổi tên bằng cách gọi phương thức chuỗi, bạn có thể sử dụng

data.rename(
    columns=unicode.lower
)

(Python 2)

hoặc là

data.rename(
    columns=str.lower
)

(Python 3)


0

Đây là một cách đơn giản: data.columns = data.columns.str.lower()


Điều này sẽ gây ra lỗi nếu trường là số
Chadee Fouad

0
df.columns = df.columns.str.lower()

là dễ nhất nhưng sẽ xuất hiện lỗi nếu một số tiêu đề là số

nếu bạn có tiêu đề số thì hãy sử dụng cái này:

df.columns = [str(x).lower() for x in df.columns]
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.