usecols
でカラムをフィルタリングして複数のインデックスを使用すると、正しく入力されないCSVファイルがpandas.read_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',
index_col=["date", "loc"],
usecols=["dummy", "date", "loc", "x"],
parse_dates=["date"],
header=0,
names=["dummy", "date", "loc", "x"])
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'キーワードの使用状況が正しくありません(理由ですあなたの例では、最初の行が欠けています。ヘッダーには、ヘッダーを持つ行としてint(デフォルトは0)が必要です。 'True'を1と解釈するため、2行目ヘッダーがありません。ただし、列名は正しいそれを 'names'引数で上書きします。しかし、それらを残すこともできますし、最初の行はデフォルトで列名に使用されます。しかし、それはあなたの最初の質問を解決しません。 – joris
これは 'usecols'バグのようです。おそらく[bug 2654](https://github.com/pydata/pandas/issues/2654)に関連していますか? – abudis
バグはまだ名前とヘッダー引数なしで見つけられました。 –