Как я могу сделать заголовки столбцов фрейма данных pandas строчными буквами?

98

Я хочу сделать все заголовки столбцов в нижнем регистре моего фрейма данных 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
....

Я не буду знать названия каждого заголовка столбца заранее.

natsuki_2002
источник
11
Проще прощеdf.columns = df.columns.str.lower()
Alex Montoya

Ответы:

179

Сделать это можно так:

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'). См. Эту суть для примера: gist.github.com/grisaitis/170e82a008480acb4fa3
grisaitis
1
[x.lower() for x in data.columns]эквивалентно:[x.lower() for x in data]
joctee
Пока вы это делаете, его хорошо использовать[x.lower().strip() for x in df0]
Павел Кранцберг
@PawelKranzberg У вас есть идеи, как уменьшить имена столбцовMultiIndex
curious_nustian
1
@curious_nustian - Да, например:df.index.names = [x.lower().strip() for x in df.index.names]
Павел Кранцберг
100

Вы можете легко сделать это с помощью 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
Антон Протопопов
источник
20

Если вы хотите выполнить переименование с помощью вызова связанного метода, вы можете использовать

data.rename(
    columns=unicode.lower
)

(Python 2)

или

data.rename(
    columns=str.lower
)

(Python 3)

theister
источник
1
df.columns = df.columns.str.lower()

самый простой, но выдаст ошибку, если некоторые заголовки числовые

если у вас есть числовые заголовки, используйте это:

df.columns = [str(x).lower() for x in df.columns]
Чади Фуад
источник
0

Вот простой способ: data.columns = data.columns.str.lower()

AnksG
источник
Это приведет к ошибке, если поле числовое
Chadee Fouad