【发布时间】:2016-08-05 14:16:50
【问题描述】:
我正在尝试使用pandas 和seaborn 绘制一个简单的Distplot,以了解数据集的密度。
输入
#Car,45
#photo,4
#movie,6
#life,1
#Horse,14
#Pets,20
#run,67
#picture,89
数据集上面有10K 行,no headers,我正在尝试使用col[1]
代码
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.read_csv('keyword.csv', delimiter=',', header=None, usecols=[1])
#print df
sns.distplot(df)
plt.show()
没有错误,因为我可以打印输入列,但 distplot 需要很长时间才能计算并冻结我的屏幕。任何加快进程的建议。
Edit1: 正如下面评论中的建议,我尝试将 pandas.read_csv 更改为 np.loadtxt,但现在出现错误。
代码:
import numpy as np
from numpy import log as log
import matplotlib.pyplot as plt
import seaborn as sns
import pandas
df = np.loadtxt('keyword.csv', delimiter=',', usecols=(1), unpack=True)
sns.kdeplot(df)
sns.distplot(df)
plt.show()
错误:
Traceback (most recent call last):
File "0_distplot_csv.py", line 7, in <module>
df = np.loadtxt('keyword.csv', delimiter=',', usecols=(1), unpack=True)
File "/usr/local/lib/python2.7/dist-packages/numpy/lib/npyio.py", line 726, in loadtxt
usecols = list(usecols)
TypeError: 'int' object is not iterable
编辑 2:我确实尝试了评论部分中提到的建议
sns.distplot(df[1])
这与最初提到的相同。屏幕冻结了很多年。
sns.distplot(df[1].values)
在这种情况下,我看到了一个奇怪的行为。
输入时
Car,45
photo,4
movie,6
life,1
Horse,14
Pets,20
run,67
picture,89
它确实会绘图,但是当输入低于时
#Car,45
#photo,4
#movie,6
#life,1
#Horse,14
#Pets,20
#run,67
#picture,89
它再次冻结整个屏幕并且什么都不做。
我确实尝试输入comments=None,认为它可能会将它们读取为 cmets。但看起来comments 没有在pandas 中使用。
谢谢
【问题讨论】:
-
您需要制作一个重现问题的最小工作示例。如果四行数据确实是您文件的全部范围,请使用
io.StringIO将其包含在您的脚本中。 -
当我指定列标题但我没有标题我需要使用列号时代码有效。数据是原始数据集中的四行。它本质上不会继续。
-
尝试只传递一个数组然后
-
您仍然可以使用pandas读取文件,只需将您需要的列转换为系列或数组即可。例如
seaborn.distplot(df[0])或seaborn.distplot(df[0].values) -
谢谢你试试这个。
标签: python pandas plot data-visualization seaborn