熊猫df.plot()抛出KeyError

时间:2018-09-30 22:36:54

标签: python pandas matplotlib

大编辑:如果我从read_csv函数中删除index_col = 1,则不会抛出此错误。留下这个问题是因为我很好奇为什么会这样。

我有以下CSV文件:

Agency  Division                   Expenditures ($000,000)
NYPD    OPERATIONS                 3331
NYPD    EXECUTIVE MANAGEMENT       489.4
NYPD    SCHOOL SAFETY              279.6
NYPD    ADMINISTRATION-PERSONNEL   263.9

当我用以下方式绘制此图时

data.plot(x='Division',y='Expenditures ($000,000)')

我被抛出:

KeyError: 'Division'

我很困惑,因为我的索引名为“ Division”,所以为什么会引发此错误?使用data.plot(kind ='bar')给了我一个合理的图,但是在按键调用此列时遇到了问题。

下面的完整代码:

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

NYPD_data = "D:/CSVs/NYPD_Spending.csv"
data = pd.read_csv(NYPD_data, index_col = 1)

plt.figure(1, figsize=(10,10))
plt.xlabel('NYPD Division')
data.plot(x='Division', y='Expenditures ($000,000)')

plt.show()

1 个答案:

答案 0 :(得分:0)

data = {'Agency': {0: 'NYPD', 1: 'NYPD', 2: 'NYPD', 3: 'NYPD'},
        'Division': {0: 'OPERATIONS',
                     1: 'EXECUTIVE MANAGEMENT',
                     2: 'SCHOOL SAFETY',
                     3: 'ADMINISTRATION-PERSONNEL'},
        'Expenditures ($000,000)': {0: 3331.0, 1: 489.4, 2: 279.6, 3: 263.9}}

df = pd.DataFrame.from_dict(data)

plt.figure(figsize=(10, 10))
plt.plot(df['Division'], df['Expenditures ($000,000)'])
plt.xticks(rotation='30')
plt.xlabel('NYPD Division')
plt.show()

enter image description here

生成图:

df.plot('Division', 'Expenditures ($000,000)')
df.plot(x='Division', y='Expenditures ($000,000)')

不起作用:

df.plot(x=df['Division'], y=['Expenditures ($000,000)'])

这不起作用,因为df.plot已经指定了源。 xy应该分别为x : label or position, default Noney : label, position or list of label, positions, default None。因此,问题是以错误的形式将参数发送给方法。 pandas.DataFrame.plot

DataFrame Plotting API

在以下情况下:

df = pd.read_csv('Book1.csv', index_col=1)

df = 
                          Agency    Expenditures ($000,000)
Division        
OPERATIONS                  NYPD                     3331.0
EXECUTIVE MANAGEMENT        NYPD                      489.4
SCHOOL SAFETY               NYPD                      279.6
ADMINISTRATION-PERSONNEL    NYPD                      263.9

请注意,Division现在是索引,不再是列,因此使用x = 'Division'将不起作用。

df.plot()

enter image description here