【发布时间】:2020-01-18 19:34:56
【问题描述】:
我正在尝试过滤 CSV 中的列,就像您在 excel 中一样。然后基于该过滤器,我希望它调用不同的列并将该列中的数据输出到绘图中。
我已尝试自行打印代码并正确打印。我只是不确定语法。当我打印代码时,它表明我可以正确搜索一列
data.head()
print('banana',
data[('Sub-Dept')] == 'Stow Each') #and data[('Sub-Dept')] == 'Stow Each Nike', 'Each Stow to Prime', 'Each Stow to Prime E', 'Each Stow to Prime W', 'Stow to Prime LeadPA')
但我不知道如何让它先过滤,然后在下面绘制。我对此很陌生。
我有一列里面有许多不同的可过滤名称。我想叫上面的那些名字。
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
x = []
y = []
data = pd.read_csv(r'C:\Users\rmond\Downloads\PS_csvFile.csv', encoding="ISO-8859-1", skiprows=6)
new_data = data.loc[(data['Sub-Dept'] == 'Stow Each')]
sns.set(style="whitegrid") #this is strictly cosmetic, you can change it any time
ax = sns.countplot(x='U.S. OSHA Recordable?', data=new_data)
plt.bar(x, y, label='Loaded from file!')
plt.ylabel('Quantity of Injuries')
plt.title('Injuries (past 4 weeks)')
plt.show()
现在,我预计它会输出 1 个包含 2 个条形的图表。问题:它在一根柱上显示数量为 80,在另一根柱上显示 20。解决方案:从另一列过滤数据后,应在同一图表内的 1 条中显示 21,在另一条中显示 7。
绘图部分效果很好,从 Excel 中提取数据也是如此。我不知道该怎么做的唯一部分是过滤该列,然后基于该过滤器绘制图形。我不确定代码应该是什么样子以及应该去哪里。请帮忙
此处为 CSV 文件:https://drive.google.com/open?id=1yJ6iQL-bOvGSLAKPcPXqgk9aKLqUEmPK
【问题讨论】:
-
请展示您的数据框以及过滤后的数据框的示例
-
您能否展示您的数据框示例或与我们共享 .csv 文件?
-
您只需要使用
.loc进行过滤尝试new_data = data.loc[data['Sub-Dept'] == 'Stow Each']然后使用seaborn 将其绘制出来。 -
感谢您的快速响应,我已将文件保存到我的驱动器中。我不知道如何与你们分享。我将开始像 Datanovice 提到的那样处理 .loc。我不确定在哪里放置该代码。那是我的问题。但我会试着弄清楚
-
是的!它工作,感谢Datanovice。正如您提到的,我可以按 1 项过滤列。但我需要一次过滤该列 6 个项目。那我该怎么做呢?
标签: python pandas csv matplotlib seaborn