KeyError:“['....'] 不在索引中”

时间:2020-12-18 23:02:42

标签: python pandas dataframe plot

这是我所拥有的: enter image description here

注意:CMPLNT_FR_TM 是投诉时间

我正在尝试绘制这样的图形:

enter image description here

我正在尝试创建一个图表来显示 X 时间有多少投诉/犯罪...

这是我的代码:

#include <iostream>

class Base {
public:
  virtual void f() { std::cout << "Base::f()" << std::endl; }
  void g() { f(); }
};
class Derived : private Base {
  public:
  void f() { std::cout << "Derived::f()" << std::endl; }
  void h() { g(); }
};

int main(){
Derived d;
d.h(); // prints Derived::f() but if virtual keyword is removed from Base::f() then prints Base::f()
}

错误:

<块引用>

键错误:“['CMPLNT_FR_TM'] 不在索引中”

谢谢,

编辑:我跑

filter1 = (new_nypd_complaint_record['BORO_NM'] == 'BROOKLYN')
crime_in_brooklyn_by_time = new_nypd_complaint_record[filter1]
#convert time format from H:M:S to H (int)
crime_in_brooklyn_by_time['CMPLNT_FR_TM'] = 
pd.to_datetime(crime_in_brooklyn_by_time['CMPLNT_FR_TM'], 
format='%H:%M:%S').dt.hour

groups = crime_in_brooklyn_by_time.groupby(["CMPLNT_FR_TM"])
crime_time = groups.size()
crime_time = crime_time.to_frame(name="NUMBER_OF_CRIME")
crime_time.sort_values(by="CMPLNT_FR_TM", ascending=False)

crime_time.head()[["NUMBER_OF_CRIME","CMPLNT_FR_TM"]].plot(x="CMPLNT_FR_TM", kind="bar")

而我只有一列: NUMBER_OF_CRIME 不知道为什么...?

2 个答案:

答案 0 :(得分:1)

确保 csv 文件的标题中不包含空格。因此,您可以返回到 Excel 表并确保其相同,或者您也可以使用它来删除(如果有) df.columns = df.columns.to_series().apply(lambda x: x.strip())

确保您拼写正确,并且这些列存在于数据框中。 您可以通过执行此操作检查列名称 list(groups.columns.values)

答案 1 :(得分:1)

该列位于您的索引中。您不能按名称引用索引列,并且会收到“KeyError”作为结果。您可以 reset_index() 将列放入 .to_frame() 之后的数据框中。您可以更改:

crime_time = crime_time.to_frame(name="NUMBER_OF_CRIME")

crime_time = crime_time.to_frame(name="NUMBER_OF_CRIME").reset_index()

此外,这段代码什么也没做:

crime_time.sort_values(by="CMPLNT_FR_TM", ascending=False)

您应该将其设置回数据框:

crime_time = crime_time.sort_values(by="CMPLNT_FR_TM", ascending=False)