Python 如何使数据框列标题全部小写?

Python 如何使数据框列标题全部小写?,python,pandas,dataframe,Python,Pandas,Dataframe,我想将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

我想将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
....

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

您可以这样做:

data.columns = map(str.lower, 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

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

data.rename(
    columns=unicode.lower
)
(Python 2)


(Python 3)

您可以使用for
列轻松地完成此操作:

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
这里有一个简单的方法:
data.columns=data.columns.str.lower()

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

如果您有数字标题,请使用:

df.columns = [str(x).lower() for x in df.columns]

请注意,当lower(column1)=lower(column2)(例如,“a”和“a”)时,这可能会导致列名重复。这可能会在以后引用列时产生意外后果。(例如,data['a']将返回一个数据帧,而不是一个序列,所有列都命名为'a')。请参阅本要点以获取示例:
[x.lower()表示数据中的x.columns]
相当于:
[x.lower()表示数据中的x]
当您使用时,最好使用
[x.lower().strip()表示df0中的x]
@PawelKranzberg您知道如何降低
多索引的列名吗,例如:
df.index.names=[x.lower().strip()代表df.index.names中的x]
更容易
df.columns=df.columns.str.lower()
我想在这种情况下编写
df.columns.astype(str.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
df.columns = df.columns.str.lower()
df.columns = [str(x).lower() for x in df.columns]