web-dev-qa-db-ja.com

Pandas KeyError:値がインデックスにありません

私は次のコードを持っています、

df = pd.read_csv(CsvFileName)

p = df.pivot_table(index=['Hour'], columns='DOW', values='Changes', aggfunc=np.mean).round(0)
p.fillna(0, inplace=True)

p[["1Sun", "2Mon", "3Tue", "4Wed", "5Thu", "6Fri", "7Sat"]] = p[["1Sun", "2Mon", "3Tue", "4Wed", "5Thu", "6Fri", "7Sat"]].astype(int)

(すべての平日の)csvファイルに十分なカバレッジがなくなるまで、常に機能していました。たとえば、次の.csvファイルの場合、

DOW,Hour,Changes
4Wed,01,237
3Tue,07,2533
1Sun,01,240
3Tue,12,4407
1Sun,09,2204
1Sun,01,240
1Sun,01,241
1Sun,01,241
3Tue,11,662
4Wed,01,4
2Mon,18,4737
1Sun,15,240
2Mon,02,4
6Fri,01,1
1Sun,01,240
2Mon,19,2300
2Mon,19,2532

次のエラーが表示されます。

KeyError: "['5Thu' '7Sat'] not in index"

非常に簡単に修正できるように思えますが、修正方法がわからないのでPythonがあまりにも新しいのです。

22
xpt

reindex を使用して、必要なすべての列を取得します。既に存在するものを保持し、それ以外の場合は空の列に入れます。

p = p.reindex(columns=['1Sun', '2Mon', '3Tue', '4Wed', '5Thu', '6Fri', '7Sat'])

したがって、コード例全体は次のようになります。

df = pd.read_csv(CsvFileName)

p = df.pivot_table(index=['Hour'], columns='DOW', values='Changes', aggfunc=np.mean).round(0)
p.fillna(0, inplace=True)

columns = ["1Sun", "2Mon", "3Tue", "4Wed", "5Thu", "6Fri", "7Sat"]
p = p.reindex(columns=columns)
p[columns] = p[columns].astype(int)
20
piRSquared

よく似た問題がありました。 csvのヘッダーにスペースが含まれていたため、同じエラーが発生しました。私のcsvにはヘッダー「Gender」が含まれており、次のようにリストされていました:

[['Gender']]

CSVに簡単にアクセスできる場合は、Excelの数式trim()を使用して、セルのスペースをクリップできます。

またはこのように削除します

df.columns = df.columns.to_series().apply(lambda x: x.strip())

9
ILikeWhiskey

同じ問題がありました。

最初の開発中に、保存する前に少し変更した.csvファイル(区切り文字としてコンマ)を使用しました。コンマを保存した後、セミコロンになりました。

Windowsでは、「地域と言語のオプション」カスタマイズ画面に依存しており、そこでリストの区切りを見つけます。これは、WindowsアプリケーションがCSV区切り文字と見なす文字です。

真新しいファイルからテストするとき、私はその問題に遭遇しました。

前にread_csvメソッドの 'sep'引数を削除しました:

df1 = pd.read_csv('myfile.csv', sep=',');

後:

df1 = pd.read_csv('myfile.csv');

そのようにして、問題は消えました。

0
Paul Gheno