如何从python中包含单列数字的csv文件中创建直方图?

时间:2014-10-10 23:09:28

标签: python csv matplotlib histogram

我有一个大约一百万个数字列的csv文件(excel电子表格)。我想用y轴上的数字频率和x轴上的数量来制作这些数据的直方图。我知道matplotlib可以绘制直方图,但我的主要问题是将csv文件从字符串转换为float,因为字符串无法绘制。这就是我所拥有的:

import matplotlib.pyplot as plt
import csv

with open('D1.csv', 'rb') as data:
    rows = csv.reader(data, quoting = csv.QUOTE_NONNUMERIC) 
    floats = [[item for number, item in enumerate(row) if item and (1 <= number <= 12)] for row in rows]
plt.hist(floats, bins=50)
plt.title("histogram")
plt.xlabel("value")
plt.ylabel("frequency")
plt.show()

3 个答案:

答案 0 :(得分:4)

您可以使用pandas

在一行中完成
import pandas as pd

pd.read_csv('D1.csv', quoting=2)['column_you_want'].hist(bins=50)

答案 1 :(得分:3)

好吧,我终于得到了与标题,标题等一起工作的东西。

import matplotlib.pyplot as plt
import pandas as pd
data = pd.read_csv('D1.csv', quoting=2)
data.hist(bins=50)
plt.xlim([0,115000])
plt.title("Data")
plt.xlabel("Value")
plt.ylabel("Frequency")
plt.show()

我的第一个问题是matplotlib是实际显示图形所必需的。另外,我需要设置动作

pd.read_csv('D1.csv', quoting=2)

数据,所以我可以用

绘制该动作的直方图
data.hist

谢谢大家的帮助。

答案 2 :(得分:0)

Panda的read_csv非常强大,但如果您的csv文件很简单(没有标题,或NaN或注释),您就不需要Pandas,因为您可以使用Numpy:

import numpy as np
import matplotlib.pyplot as plt
data = np.loadtxt('D1.csv')
plt.hist(data, normed=True, bins='auto')

(实际上loadtxt可以处理一些标题和评论,但read_csv更通用了)