ฉันมีไฟล์ csv ที่เข้ามาไม่ถูกต้องpandas.read_csv
เมื่อฉันกรองคอลัมน์ด้วยusecols
และใช้ดัชนีหลายรายการ
import pandas as pd
csv = r"""dummy,date,loc,x
bar,20090101,a,1
bar,20090102,a,3
bar,20090103,a,5
bar,20090101,b,1
bar,20090102,b,3
bar,20090103,b,5"""
f = open('foo.csv', 'w')
f.write(csv)
f.close()
df1 = pd.read_csv('foo.csv',
header=0,
names=["dummy", "date", "loc", "x"],
index_col=["date", "loc"],
usecols=["dummy", "date", "loc", "x"],
parse_dates=["date"])
print df1
# Ignore the dummy columns
df2 = pd.read_csv('foo.csv',
index_col=["date", "loc"],
usecols=["date", "loc", "x"], # <----------- Changed
parse_dates=["date"],
header=0,
names=["dummy", "date", "loc", "x"])
print df2
ฉันคาดว่า df1 และ df2 ควรจะเหมือนกันยกเว้นคอลัมน์ดัมมี่ที่หายไป แต่คอลัมน์มีป้ายกำกับไม่ถูกต้อง นอกจากนี้วันที่จะถูกแยกวิเคราะห์เป็นวันที่
In [118]: %run test.py
dummy x
date loc
2009-01-01 a bar 1
2009-01-02 a bar 3
2009-01-03 a bar 5
2009-01-01 b bar 1
2009-01-02 b bar 3
2009-01-03 b bar 5
date
date loc
a 1 20090101
3 20090102
5 20090103
b 1 20090101
3 20090102
5 20090103
การใช้หมายเลขคอลัมน์แทนชื่อทำให้ฉันมีปัญหาเหมือนกัน ฉันสามารถแก้ปัญหาได้โดยการวางคอลัมน์จำลองหลังขั้นตอน read_csv แต่ฉันกำลังพยายามทำความเข้าใจว่าเกิดอะไรขึ้น ฉันใช้แพนด้า 0.10.1
แก้ไข: แก้ไขการใช้งานส่วนหัวที่ไม่ถูกต้อง
header
และnames
คำหลักของคุณไม่ถูกต้อง (นั่นคือสาเหตุที่แถวแรกหายไปในตัวอย่างของคุณheader
คาดว่า int (ค่าเริ่มต้น 0) เป็นแถวที่มีส่วนหัวเนื่องจากคุณให้ 'True' ซึ่งตีความเป็น 1 แถวที่สอง (แถวข้อมูลแรก) ถูกใช้เป็นส่วนหัวและขาดหายไปอย่างไรก็ตามชื่อคอลัมน์ถูกต้องเนื่องจากคุณเขียนทับด้วยnames
อาร์กิวเมนต์ แต่คุณสามารถเว้นไว้ได้และแถวแรกจะใช้สำหรับชื่อคอลัมน์ตามค่าเริ่มต้น อย่างไรก็ตามมันไม่สามารถตอบคำถามเริ่มต้นของคุณได้