我有一个大约一百万个数字列的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()
答案 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
更通用了)