为什么我的列数据在Pandas中被One关闭?

时间:2014-05-02 20:46:38

标签: python csv pandas

我正在使用Pandas库来处理文本,因为我发现csv模块更容易。这是问题所在。我有一个包含多列的.csv文件:subtitletitle,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。谁能解释这种行为?是预期的,我该如何避免呢?

5 个答案:

答案 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)会强制熊猫创建一个索引列,而不是推断一个索引列,这样会使我的数据正确排列。