2016-07-19 27 views
5

Tôi có đoạn code sau,Pandas KeyError: Giá trị không ở chỉ số

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) 

Nó đã luôn luôn được làm việc cho đến khi tập tin csv không có đủ bảo hiểm (của tất cả các ngày trong tuần). Đối với ví dụ, với tệp .csv sau,

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 

tôi sẽ nhận được lỗi sau:

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

Nó dường như có một sửa chữa rất dễ dàng, nhưng tôi chỉ là quá mới để Python để biết cách khắc phục. Hãy giúp tôi. Cảm ơn.

+0

Đơn giản là 'p = p.astype (int)' không đủ? Thật khó để nói lý do bạn lập chỉ mục các cột như vậy, hai danh sách trông giống hệt nhau và từ dữ liệu đầu vào của bạn, có vẻ như bạn không * loại trừ * cột theo cách này. – jedwards

+0

Thậm chí nếu bạn đặt các cột mà bạn nhìn vào (ví dụ: loại trừ '['5Thu' '7Sat']'), bạn vẫn sẽ gặp lỗi khi tạo 'np.nan' thành' int'. Bạn có thể sử dụng giá trị điền khác (đối với các mục bị thiếu) để giải quyết vấn đề này. – Alex

+0

Cuối cùng tôi sẽ cần tất cả các ngày trong tuần trong chỉ mục (ví dụ: '5Thu' '7Sat'), bởi vì tôi sẽ vẽ chúng tiếp theo. Vì vậy, tôi đang tìm cách để thêm tất cả, mà không ảnh hưởng đến mức trung bình. – xpt

Trả lời

7

sử dụng reindex để nhận tất cả các cột bạn cần. Nó sẽ bảo tồn những cái đã có sẵn và đặt trong các cột trống nếu không.

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

Vì vậy, toàn bộ mã ví dụ của bạn sẽ giống như thế này:

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

Tôi đã có một vấn đề rất giống nhau. Tôi đã gặp lỗi tương tự vì csv chứa dấu cách trong tiêu đề. csv của tôi chứa một tiêu đề "Giới tính" và tôi đã có nó được liệt kê như sau:

[['Gender']] 

Nếu nó đủ dễ dàng để bạn có thể truy cập vào csv của bạn, bạn có thể sử dụng công thức excel trim() clip bất kỳ không gian của các tế bào.

+0

Tôi sợ rằng tôi là một trường hợp hoàn toàn khác biệt: _ "Nó luôn hoạt động cho đến khi tệp csv không có đủ vùng phủ sóng" _, mặc dù symtoms là ***. Nhưng cảm ơn cho đầu vào của bạn mặc dù. – xpt

Các vấn đề liên quan