Python pandas read_csv index_col=None不使用每行末尾的分隔符

Python pandas read_csv index_col=None不使用每行末尾的分隔符,python,pandas,Python,Pandas,我正在阅读“Python for Data Analysis”一书,在“示例:2012联邦选举委员会数据库”一节中将数据读取到数据帧时遇到了问题。问题是数据的其中一列总是被设置为索引列,即使index_col参数被设置为None 以下是指向数据的链接: 以下是加载代码(为了节省检查时间,我将nrows设置为10): 简而言之,我排除了数据列输出,但这是我的输出(请不要使用索引值): [20]中的:fec 出[20]: 索引:10个条目,C00410118至C00410118 数据列: ... 数

我正在阅读“Python for Data Analysis”一书,在“示例:2012联邦选举委员会数据库”一节中将数据读取到数据帧时遇到了问题。问题是数据的其中一列总是被设置为索引列,即使index_col参数被设置为None

以下是指向数据的链接:

以下是加载代码(为了节省检查时间,我将nrows设置为10):

简而言之,我排除了数据列输出,但这是我的输出(请不要使用索引值):

[20]中的
:fec
出[20]:
索引:10个条目,C00410118至C00410118
数据列:
...
数据类型:float64(4)、int64(3)、object(11)
这是这本书的输出(同样排除了数据列):

[13]中的
:fec=read_csv('p0000001-ALL.csv'))
In[14]:fec
出[14]:
INT64索引:1001731个条目,0到1001730
...
数据类型:float64(1)、int64(1)、object(14)
我的输出中的索引值实际上是文件中的第一列数据,然后将所有剩余数据向左移动一。有人知道如何防止这列数据被列为索引吗?我希望索引只增加+1个整数

我对蟒蛇和熊猫还比较陌生,所以我为给您带来的不便表示歉意。谢谢。

快速回答 如果每行末尾都有分隔符,请使用index_col=False而不是index_col=None关闭索引列推断并放弃最后一列

更多细节 查看数据后,每行末尾都有一个逗号。以及这段引文(自本帖创建之日起,文档已被编辑):

索引列:列编号、列名或列编号/名称列表,用作结果数据帧的索引(行标签)。默认情况下,它将在不使用任何列的情况下对行进行编号,除非有一个数据列比标题多,在这种情况下,第一列作为索引

from显示pandas相信您有n个标题和n+1个数据列,并将第一列作为索引


编辑2014年10月20日-更多信息

我发现这特别是关于尾部限制器以及如何简单地忽略它们:

如果文件的数据列数大于列名数,则第一列将用作数据帧的行名:

通常,您可以使用index_col选项实现此行为

当文件在每个数据行的末尾准备了分隔符时,会出现一些异常情况,这会使解析器感到困惑。要显式禁用索引列推断并放弃最后一列,请传递index_col=False:


Re:craigts的回答是,对于那些在索引col中使用False或None参数时遇到问题的人,例如在试图删除范围索引的情况下,可以使用整数来指定要用作索引的列。例如:

df = pd.read_csv('file.csv', index_col=0)
上面将第一列设置为索引(在我的“常见情况”中不添加范围索引)

更新 鉴于这个答案很受欢迎,我想我应该添加一些上下文/演示:

# Setting up the dummy data
In [1]: df = pd.DataFrame({"A":[1, 2, 3], "B":[4, 5, 6]})

In [2]: df
Out[2]:
   A  B
0  1  4
1  2  5
2  3  6

In [3]: df.to_csv('file.csv', index=None)
File[3]:
A  B
1  4
2  5
3  6
无索引或无/假读取都将导致范围索引:

In [4]: pd.read_csv('file.csv')
Out[4]:
   A  B
0  1  4
1  2  5
2  3  6

# Note that this is the default behavior, so the same as In [4]
In [5]: pd.read_csv('file.csv', index_col=None)
Out[5]:
   A  B
0  1  4
1  2  5
2  3  6

In [6]: pd.read_csv('file.csv', index_col=False)
Out[6]:
   A  B
0  1  4
1  2  5
2  3  6
In [7]: pd.read_csv('file.csv', index_col=0)
Out[7]:
   B
A
1  4
2  5
3  6
但是,如果我们指定“A”(第0列)实际上是索引,我们可以避免使用范围索引:

In [4]: pd.read_csv('file.csv')
Out[4]:
   A  B
0  1  4
1  2  5
2  3  6

# Note that this is the default behavior, so the same as In [4]
In [5]: pd.read_csv('file.csv', index_col=None)
Out[5]:
   A  B
0  1  4
1  2  5
2  3  6

In [6]: pd.read_csv('file.csv', index_col=False)
Out[6]:
   A  B
0  1  4
1  2  5
2  3  6
In [7]: pd.read_csv('file.csv', index_col=0)
Out[7]:
   B
A
1  4
2  5
3  6

你说得对。他所需要做的就是在标题的末尾加上一个逗号,问题就解决了。我删除了我的帖子,因为它不正确。谢谢craigts和juniper的帮助!我最终从数据集中删除了最后一个列表项,因为它们都为空。@Rich您能确定接受我的答案吗?谢谢
index\u col=False是我需要的@我很乐意帮忙!这太糟糕了——也许他们在过去几个月里改变了网站上CSV文件的形式(我自己没有对其进行任何修改)?在我的例子中,我设置了index_col=0,这不起作用,index_col=None起作用只是提醒一下,这在功能上并不等同于index_col=False。如果只需要数据集上的标准整数索引,请使用false。如果要将第一个数据列作为索引,请使用0。如果希望第一个数据列作为具有额外分隔符的数据集中的索引,则需要设置usecols并指定index_col=0。我将很快扩展我的答案,以涵盖这个问题。
In [7]: pd.read_csv('file.csv', index_col=0)
Out[7]:
   B
A
1  4
2  5
3  6