ฉันจะสร้างส่วนหัวคอลัมน์ดาต้าเฟรมของแพนด้าตัวพิมพ์เล็กทั้งหมดได้อย่างไร


105

ฉันต้องการสร้างส่วนหัวคอลัมน์ทั้งหมดในกรอบข้อมูลแพนด้าของฉันตัวพิมพ์เล็ก

ตัวอย่าง

ถ้าฉันมี:

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

ฉันจะไม่ทราบชื่อของส่วนหัวแต่ละคอลัมน์ล่วงหน้า


12
ง่ายที่สุดdf.columns = df.columns.str.lower()
Alex Montoya

คำตอบ:


189

คุณสามารถทำได้ดังนี้:

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') ซึ่งอาจส่งผลที่ไม่คาดคิดเมื่ออ้างอิงคอลัมน์ในภายหลัง (เช่น 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]
Pawel Kranzberg

@PawelKranzberg คุณมีความคิดอย่างไรที่จะลดชื่อคอลัมน์ของMultiIndex
สงสัย_nustian

1
@curious_nustian - ใช่เช่นdf.index.names = [x.lower().strip() for x in df.index.names]
Pawel Kranzberg

105

คุณสามารถทำได้อย่างง่ายดาย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

22

หากคุณต้องการเปลี่ยนชื่อโดยใช้การโทรแบบผูกมัดคุณสามารถใช้

data.rename(
    columns=unicode.lower
)

(Python 2)

หรือ

data.rename(
    columns=str.lower
)

(Python 3)


1
df.columns = df.columns.str.lower()

เป็นวิธีที่ง่ายที่สุด แต่จะให้ข้อผิดพลาดหากส่วนหัวบางส่วนเป็นตัวเลข

หากคุณมีส่วนหัวที่เป็นตัวเลขให้ใช้สิ่งนี้:

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

1
ฉันเดาว่ามันง่ายกว่าที่จะเขียนdf.columns.astype(str).str.lower()ในกรณีนั้น แต่อาจจะละเอียดกว่าเล็กน้อย
Anton Protopopov

0

นี่คือวิธีง่ายๆ: data.columns = data.columns.str.lower()


สิ่งนี้จะทำให้เกิดข้อผิดพลาดหากฟิลด์เป็นตัวเลข
Chadee Fouad
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.