Saya memiliki file csv yang tidak masuk dengan benar pandas.read_csv
ketika saya memfilter kolom dengan usecols
dan menggunakan beberapa indeks.
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
Saya berharap bahwa df1 dan df2 harus sama kecuali untuk kolom dummy yang hilang, tetapi kolomnya salah label. Juga tanggal diurai sebagai tanggal.
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
Menggunakan nomor kolom daripada nama memberi saya masalah yang sama. Saya dapat mengatasi masalah ini dengan menghapus kolom boneka setelah langkah read_csv, tetapi saya mencoba memahami apa yang salah. Saya menggunakan panda 0.10.1.
edit: memperbaiki penggunaan header yang buruk.
header
dan Andanames
tidak benar (itulah sebabnya baris pertama hilang dalam contoh Anda.header
Mengharapkan int (default 0) sebagai baris dengan tajuk. Karena Anda memberikan 'True' yang diartikan sebagai 1, baris kedua (baris data pertama) digunakan sebagai tajuk dan hilang. Namun nama kolom sudah benar karena Anda menimpanya dengannames
argumen. Namun Anda dapat membiarkannya dan baris pertama digunakan untuk nama kolom secara default. Namun, itu tidak menyelesaikan pertanyaan awal Anda.