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, чтобы узнать, как его исправить.

Ответ 1

Используйте 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)

Ответ 2

У меня была очень похожая проблема. Я получил ту же ошибку, потому что csv содержал пробелы в заголовке. Мой csv содержал заголовок "Пол", и я указал его как:

[['Gender']]

Если вам достаточно легко получить доступ к вашему csv, вы можете использовать формулу excel formula trim() для обрезания любых пространств ячеек.

или удалить его так

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