Tôi có một tệp csv không đến chính xác pandas.read_csv
khi tôi lọc các cột usecols
và sử dụng nhiều chỉ mục.
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
Tôi hy vọng rằng df1 và df2 phải giống nhau ngoại trừ cột giả bị thiếu, nhưng các cột bị gắn nhãn sai. Ngoài ra ngày được phân tích cú pháp như một ngày.
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
Sử dụng số cột thay vì tên cho tôi cùng một vấn đề. Tôi có thể giải quyết vấn đề này bằng cách bỏ cột giả sau bước read_csv, nhưng tôi đang cố gắng hiểu điều gì đang xảy ra. Tôi đang sử dụng gấu trúc 0.10.1.
chỉnh sửa: đã sửa lỗi sử dụng tiêu đề không hợp lệ.
header
vànames
từ khóa của bạn không đúng (đó là lý do tại sao hàng đầu tiên bị thiếu trong ví dụ của bạn. Bạnheader
mong đợi giá trị int (mặc định là 0) là hàng có tiêu đề. Bởi vì bạn cung cấp 'True' được hiểu là 1, hàng thứ hai (hàng dữ liệu đầu tiên) được sử dụng làm tiêu đề và bị thiếu. Tuy nhiên, tên cột chính xác vì bạn ghi đè lên nó bằngnames
đối số. Nhưng bạn có thể để lại cả hai và hàng đầu tiên được sử dụng cho tên cột theo mặc định. Tuy nhiên, nó không giải quyết được câu hỏi ban đầu của bạn.