如何使Pandas DataFrame列标题全部小写?


96

我想使我的pandas数据框中的所有列标题都小写

如果我有:

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
....

我想通过执行以下操作将XRAT更改为xrat:

data.headers.lowercase()

这样我得到:

  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
....

我不会提前知道每个列标题的名称。


10
更简单df.columns = df.columns.str.lower()
Alex Montoya

Answers:


175

您可以这样做:

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

要么

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

例:

>>> 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
请注意,当lower(column1)== lower(column2)时,这可能导致重复的列名(例如,“ a”和“ A”)。以后在引用列时可能会产生意想不到的后果。(例如,data ['a']将返回一个DataFrame,而不是Series,所有列都命名为'a')。参见示例摘要
grisaitis 2015年

1
[x.lower() for x in data.columns]等效于:[x.lower() for x in data]
joctee

当您使用它时,很好用[x.lower().strip() for x in df0]
Pawel Kranzberg

@PawelKranzberg您是否知道如何降低MultiIndex
curious_nustian

1
@curious_nustian-是的,例如:df.index.names = [x.lower().strip() for x in df.index.names]
Pawel Kranzberg

99

您可以使用str.lower以下方法轻松实现columns

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

例:

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

如果要使用链接方法调用进行重命名,则可以使用

data.rename(
    columns=unicode.lower
)

(Python 2)

要么

data.rename(
    columns=str.lower
)

(Python 3)


0

这是一个简单的方法: data.columns = data.columns.str.lower()


如果字段为数字,则将产生错误
Chadee Fouad

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

是最简单的方法,但是如果某些标头为数字,则会出现错误

如果您有数字标题,请使用以下代码:

df.columns = [str(x).lower() for x in df.columns]
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.