145

我想让我的熊猫数据框中的所有列标题都小写

例子

如果我有:

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

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

4

5 回答 5

244

你可以这样做:

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
于 2013-11-01T11:42:38.613 回答
128

您可以使用str.lowerfor轻松完成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
于 2016-08-13T10:41:42.127 回答
26

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

data.rename(
    columns=unicode.lower
)

(Python 2)

或者

data.rename(
    columns=str.lower
)

(Python 3)

于 2016-06-22T09:28:43.767 回答
4
df.columns = df.columns.str.lower()

是最简单的,但如果某些标题是数字的,则会出错

如果你有数字标题,那么使用这个:

df.columns = [str(x).lower() for x in df.columns]
于 2020-06-26T19:55:25.520 回答
0

我注意到如果列名由数字组成(例如“123”),其他一些答案将失败。尝试这些也可以处理此类情况。

选项 1:使用df.rename

def rename_col(old_name):
    return str(old_name).lower()

df.rename(rename_col)

选项 2(来自此评论):

df.columns.astype(str).str.lower()
于 2021-07-13T15:46:23.253 回答