csv 为什么我的列数据在Pandas中差一个?

7vhp5slm  于 2023-04-09  发布在  其他
关注(0)|答案(5)|浏览(126)

我使用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。有人能解释这种行为吗?这是预期的吗?我如何避免它?

hgb9j2n6

hgb9j2n61#

我想你是想加载一个有4列的文件,但只给了3个列名。

data = pandas.read_csv('C:\Users\B\cwitems.csv', names=colnames, usecols=[0,1,2])

您不必删除文件中未使用的列。
默认情况下,read_csv加载所有列,在本例中#cols = #colnames+1,因此第一列用作 Dataframe 索引。所有其余列移位1。

vltsax25

vltsax252#

不知道这是不是一个答案,但它太长的评论。随意忽略它。

>>> 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)
dw1jzc5e

dw1jzc5e3#

我已经为pd.read_csv添加了index_col=False,现在可以了。

jexiocij

jexiocij4#

看起来我已经解决了这个问题-虽然我在文档中没有找到这个问题,所以也许一个更有经验的Pandas用户可以解释为什么/如何。
我是这么做的我删除了一个未使用的列(.csv文件中的最后一列),并将索引重置为正确的/预期的顺序。我不知道该如何解释这种行为(或其更正)-是否与我的.csv文件有关,或者是否是Pandas的问题(也许只是Pandas在处理文本时的问题)。我不知道。
无论哪种方式,我真的很感谢所有的帮助!!我这次很幸运。

j2datikz

j2datikz5#

我也遇到了类似的问题,原来我试图下载的.csv在标题行的末尾没有逗号,但在每隔一行的末尾都有逗号。传递index_col=False(而不是index_col=None,默认值)强制pandas创建一个索引列,而不是推断一个,这使我的数据正确排列。

相关问题