繁体   English   中英

如何使用Pandas绘制CSV文件的字符串和浮点值的直方图

[英]How to plot histogram of string and float value of a csv file using Pandas

我需要显示csv文件特定属性的直方图。 当我绘制数值时,我没有问题,但是当我使用字符串值时,程序崩溃。 现在,我使用虹膜数据集进行测试,选择“种类”列时程序崩溃。 错误是:

Traceback (most recent call last):
File "C:\Users\Enrico\PycharmProjects\PythonDataset\Plot_hist.py", line 31, 
  in <lambda> self.pushButton.clicked.connect(lambda: 
  self.plotHistogram(fileName))
File "C:\Users\Enrico\PycharmProjects\PythonDataset\Plot_hist.py", line 50, 
  in plotHistogram data_file[attribute].plot(kind='hist')
File "C:\Python36\lib\site-packages\pandas\plotting\_core.py", line 2741, in 
  __call__ **kwds)
File "C:\Python36\lib\site-packages\pandas\plotting\_core.py", line 2002, in 
  plot_series **kwds)
File "C:\Python36\lib\site-packages\pandas\plotting\_core.py", line 1804, in 
  _plot plot_obj.generate()
File "C:\Python36\lib\site-packages\pandas\plotting\_core.py", line 258, in 
  generate self._compute_plot_data()
File "C:\Python36\lib\site-packages\pandas\plotting\_core.py", line 373, in 
  _compute_plot_data 'plot'.format(numeric_data.__class__.__name__))
TypeError: Empty 'DataFrame': no numeric data to plot

我的代码是这样的:

import matplotlib.pyplot as plt
import pandas as pd

def plotHistogram(self, file):
    attribute = str(self.comboBox.currentText())
    data_file = pd.read_csv(file)
    data_file[attribute].plot(kind='hist')
    plt.ylabel('Frequency')
    plt.xlabel(attribute)
    plt.title("File")
    plt.show()

attribute是列名, file是csv文件。

注意:如果我将data_file[attribute].plot(kind='hist')更改为data_file[attribute].hist() ,程序不会崩溃,但是很长一段时间后,它会绘制一个奇怪的直方图。

编辑:我必须显示实验室分析值的直方图,从具有20到30个属性和一千多行的csv文件中。 我需要显示每个属性的值的直方图,但是这些值可以是数字数据或字符串。 在x轴上,我必须具有从最小值到最大值的值的比例,在y值上具有频率的比例,如本例所示: 在此处输入链接描述

您不能绘制字符串的直方图。 您可能正在寻找的是一个条形图,其中条形的高度代表各个字符串出现的频率。 这可以通过value_counts()

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

df = pd.DataFrame({"num" : np.random.randint(20, size=250),
                  "str" : np.random.choice(["cat", "dog", "pig"], 
                                           size=250, p=[.2,.3,.5])})

df["str"].value_counts().plot.bar()

plt.show()

在此处输入图片说明

如果您想让它看起来更类似于数字直方图,则可以将宽度设置为1

df["str"].value_counts().plot.bar(width=1)

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM