如何让pandas dataframe列标题全部小写?

nat*_*002 77 python dataframe pandas

我想让我的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
....
Run Code Online (Sandbox Code Playgroud)

我想通过做类似的事情将XRAT改为xrat:

data.headers.lowercase()
Run Code Online (Sandbox Code Playgroud)

所以我得到:

  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
....
Run Code Online (Sandbox Code Playgroud)

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

Rom*_*kar 142

你可以这样做:

data.columns = map(str.lower, data.columns)
Run Code Online (Sandbox Code Playgroud)

要么

data.columns = [x.lower() for x in data.columns]
Run Code Online (Sandbox Code Playgroud)

例:

>>> 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
Run Code Online (Sandbox Code Playgroud)

  • 请注意,当较低(column1)== lower(column2)时(例如,'a'和'A'),这可能导致重复的列名称.以后引用列时,这可能会产生意想不到的后果.(例如,data ['a']将返回一个DataFrame,而不是一个Series,所有列都名为'a').请参阅此要点:https://gist.github.com/grisaitis/170e82a008480acb4fa3 (5认同)
  • `[x.lower() for x in data.columns]` 相当于:`[x.lower() for x in data]` (2认同)
  • 当您使用它时,最好使用 `[x.lower().strip() for x in df0]` (2认同)
  • @curious_nustian - 是的,例如:`df.index.names = [x.lower().strip() for x in df.index.names]` (2认同)

Ant*_*pov 77

您可以轻松地执行str.lower以下操作columns:

df.columns = df.columns.str.lower()
Run Code Online (Sandbox Code Playgroud)

例:

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
Run Code Online (Sandbox Code Playgroud)


the*_*ter 16

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

data.rename(
    columns=unicode.lower
)
Run Code Online (Sandbox Code Playgroud)

(Python 2)

要么

data.rename(
    columns=str.lower
)
Run Code Online (Sandbox Code Playgroud)

(Python 3)


Cha*_*uad 7

df.columns = df.columns.str.lower()
Run Code Online (Sandbox Code Playgroud)

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

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

df.columns = [str(x).lower() for x in df.columns]
Run Code Online (Sandbox Code Playgroud)

  • 我想在这种情况下写“df.columns.astype(str).str.lower()”更容易,但可能有点冗长。 (4认同)