Як я можу зробити заголовки стовпців кадру даних pandas малими?


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()
Алекс Монтойя

Відповіді:


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
Зверніть увагу, що це може призвести до дублікатів назв стовпців, коли нижчий (стовпець1) == нижчий (стовпець2) (наприклад, 'a' та 'A'). Це може мати непередбачені наслідки при подальшому посиланні на стовпці. (наприклад, дані ['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]
Павел Кранцберг

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]
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.