ฉันจะดึงข้อมูลจำนวนคอลัมน์ในเฟรมข้อมูล Pandas ได้อย่างไร


184

คุณจะเรียกใช้จำนวนคอลัมน์ในโปรแกรม dataframe ของหมีแพนด้าโดยทางโปรแกรมได้อย่างไร ฉันหวังว่าจะชอบ:

df.num_columns

คำตอบ:


305

ชอบมาก

import pandas as pd
df = pd.DataFrame({"pear": [1,2,3], "apple": [2,3,4], "orange": [3,4,5]})

len(df.columns)
3

35
บวกdf.shapeให้สิ่งอันดับด้วย (n_rows, n_columns)
mkln

3
@mkln ถ้าคุณโพสต์ df.shape [1] เป็นคำตอบฉันจะ +1 นี่เป็นวิธีที่ดีกว่าในการทำงานกับผู้ใช้จำนวนมากและสมควรได้รับคำตอบที่แยกจากกัน
Phil Cooper

เสร็จแล้ว @PhilCooper บางทีคุณสามารถอธิบายได้ว่าทำไมถึงdf.shapeดีกว่า ฉันเดาว่ามันไม่ได้เรียกฟังก์ชั่น แต่เพียงแค่อ่านคุณสมบัติจากหน่วยความจำ?
mkln

113

ทางเลือก:

df.shape[1]

( df.shape[0]คือจำนวนแถว)


2
+1 เพราะฉันชอบที่จะสนับสนุนการจัดการกับวัตถุที่เป็นก้อนและหมีแพนด้าด้วยไวยากรณ์ประเภท martix (df.shape vs len (df.columns)) ความจริงจะบอกถ้าคุณดูที่ pandas descriptor สำหรับรูปร่างมันเรียก len (df.columns) แต่อาร์เรย์ numpy และ matricies มีพวกมันเป็นคุณลักษณะ การดำเนินการ vectorized ที่มีประสิทธิภาพมากที่สุดสามารถทำได้ด้วย syntas หลามปกติเมื่อเทียบกับการดำเนินการ vectorized และเกือบจะผิดเสมอ (การปฏิบัติการ numba / jit ยกเว้นจากการวิพากษ์วิจารณ์นั้น)
Phil Cooper

26

หากตัวแปรที่ถือครองดาต้าเฟรมนั้นเรียกว่า df ดังนั้น:

len(df.columns)

ให้จำนวนคอลัมน์

และสำหรับผู้ที่ต้องการจำนวนแถว:

len(df.index)

สำหรับสิ่งอันดับที่มีจำนวนทั้งแถวและคอลัมน์:

df.shape

3
จะไม่len(df)ให้แถวหรือไม่
Padraic Cunningham

4
@PadraicCunningham pandas มีทางลัดมากมายที่ง่ายต่อการลืมดังนั้นฉันชอบที่จะเพิกเฉยและใช้ตรรกะหลักแทนการแก้ปัญหา คุณอาจเสียสละความเร็วในการประมวลผลในบางครั้ง แต่ฉันให้ความสำคัญกับเวลาในการเข้ารหัสและการอ่านโค้ดมากกว่าเวลาประมวลผลสองสามวินาที ในกรณีพิเศษนี้: หากคุณทราบว่าจำนวนแถวสามารถคำนวณได้ด้วย len (df.index) ในครั้งถัดไปที่คุณต้องการจำนวนคอลัมน์มันเป็นเรื่องปกติที่จะต้องทำ len (df.columns)
multigoodverse

0

สิ่งนี้ใช้ได้สำหรับฉัน len (list (df))


จากการตรวจสอบ: สวัสดีโพสต์นี้ดูเหมือนจะไม่ได้ให้คำตอบที่มีคุณภาพสำหรับคำถาม โปรดแก้ไขคำตอบของคุณและปรับปรุงหรือเพียงแค่โพสต์เป็นความคิดเห็น
sɐunıɔןɐqɐp

อย่าทำอย่างนั้น มันสร้างรายการใหม่เสียหน่วยความจำและความเร็ว
jmmcd

0

ฟังก์ชัน df.info () จะให้ผลลัพธ์ดังนี้ดังนี้ หากคุณใช้เมธอด read_csv ของ Pandas โดยไม่มีพารามิเตอร์ sep หรือ sep ด้วย ","

raw_data = pd.read_csv("a1:\aa2/aaa3/data.csv")
raw_data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5144 entries, 0 to 5143
Columns: 145 entries, R_fighter to R_age

0

มีหลายตัวเลือกในการรับหมายเลขคอลัมน์และข้อมูลคอลัมน์เช่น:
ลองตรวจสอบ

local_df = pd.DataFrame (np.random.randint (1,12, size = (2,6)), คอลัมน์ = ['a', 'b', 'c', 'd', 'e', ​​'f' ']) 1. local_df.shape [1] -> แอตทริบิวต์ Shape ส่งคืน tuple เป็น (แถว & คอลัมน์) (0,1)

  1. local_df.info () -> วิธีการข้อมูลจะส่งกลับข้อมูลรายละเอียดเกี่ยวกับกรอบข้อมูลและมันคอลัมน์เช่นคอลัมน์จำนวนชนิดข้อมูลของคอลัมน์ไม่นับค่า null การใช้หน่วยความจำโดย Data Frame

  2. len (local_df.columns) -> แอตทริบิวต์ของคอลัมน์จะส่งคืนวัตถุดัชนีของคอลัมน์เฟรมข้อมูล & ฟังก์ชัน len จะส่งกลับคอลัมน์ทั้งหมดที่มีอยู่

  3. local_df.head (0) -> วิธีหัวกับพารามิเตอร์ 0 จะกลับแถวที่ 1 ของ df ซึ่งอันที่จริงไม่มีอะไรนอกจากส่วนหัว

สมมติว่าจำนวนคอลัมน์ไม่เกิน 10 เพื่อความสนุกในการวนซ้ำ: li_count = 0 สำหรับ x ใน local_df: li_count = li_count + 1 พิมพ์ (li_count)

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