我正在使用Pandas库来处理文本,因为我发现远比csv
模块更容易。这是问题所在。我有一个包含多列的.csv文件:subtitle
,title,
和description
。以下是我访问每列中行内容的方法。
colnames = ['subtitle', 'description', 'title']
data = pandas.read_csv('C:\Users\B\cwitems.csv', names=colnames)
subtit = list(data.subtitle)
desc = list(data.description)
title = list(data.title)
for line in zip(subtit, desc, title):
print line
问题是,无论出于何种原因,当我打印line
时,不打印预期的字幕。当我打印每个desc
时,标题会显示出来。当我单独打印subtit
时,将打印描述。因此,似乎每列都偏离了-1。谁能解释这种行为?是预期的,我该如何避免呢?
答案 0 :(得分:2)
我认为你试图加载一个包含4列的文件,但只提供了3个列名。如果您只需要加载前3列,请使用
data = pandas.read_csv('C:\Users\B\cwitems.csv', names=colnames, usecols=[0,1,2])
您不必删除文件中未使用的列。
默认情况下,read_csv加载所有列,在您的情况下#cols = #colnames + 1,因此第一列用作数据帧索引。所有剩余的列都移动了1.
答案 1 :(得分:1)
不确定这是否是答案,但评论太长了。随意忽略它。
>>> from itertools import izip_longest
>>>
>>> l1 = [1,2]
>>> l2 = [1,2,3,4,5]
>>> l3 = [1,2,3]
>>>
>>> for line in izip_longest(l1,l2,l3):
... print line
将打印:
(1, 1, 1)
(2, 2, 2)
(None, 3, 3)
(None, 4, None)
(None, 5, None)
答案 2 :(得分:0)
看来我解决了这个问题 - 我没有在文档中的任何地方找到这个,所以也许更有经验的Pandas用户可以解释原因/方法。我当然不能。
这就是我所做的:我删除了一个未使用的列(我的.csv文件中的最后一列),并将索引重置为正确/预期的顺序。我不知道是什么解释了行为(或它的纠正) - 它是否与我的.csv文件有关,或者它是否是熊猫的事情(也许只是一个Pandas'在处理文本时) 。我不知道。
无论哪种方式,我都非常感谢所有的帮助!!这次我很幸运。
答案 3 :(得分:0)
我为index_col=False
添加了pd.read_csv
,现在可以。
答案 4 :(得分:-1)
我有一个类似的问题,原来我尝试下载的.csv在标题行的末尾没有逗号,但在其他行的末尾确实有逗号。传递index_col = False(默认为not index_col = None)会强制熊猫创建一个索引列,而不是推断一个索引列,这样会使我的数据正确排列。