Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫弄乱了DataFrame.from_csv上的日期列_Python_Date_Csv_Pandas - Fatal编程技术网

Python 熊猫弄乱了DataFrame.from_csv上的日期列

Python 熊猫弄乱了DataFrame.from_csv上的日期列,python,date,csv,pandas,Python,Date,Csv,Pandas,我正在使用Python3.4.0,pandas==0.16.2。我有CSV文件中的足球队结果,其中包含以下列:日期、地点、goals.scored、goals.lost、result。“at”列可以有三个值(H、A、N)中的一个,分别表示比赛是在球队的主场、客场还是在中立地进行。以下是其中一个文件的标题: date,at,goals.scored,goals.lost,result 16/09/2014,A,0,2,2 01/10/2014,H,4,1,1 22/10/2014,A,2,1,1

我正在使用Python3.4.0,pandas==0.16.2。我有CSV文件中的足球队结果,其中包含以下列:日期、地点、goals.scored、goals.lost、result。“at”列可以有三个值(H、A、N)中的一个,分别表示比赛是在球队的主场、客场还是在中立地进行。以下是其中一个文件的标题:

date,at,goals.scored,goals.lost,result
16/09/2014,A,0,2,2
01/10/2014,H,4,1,1
22/10/2014,A,2,1,1
04/11/2014,H,3,3,0
26/11/2014,H,2,0,1
09/12/2014,A,4,1,1
25/02/2015,H,1,3,2
17/03/2015,A,2,0,1
19/08/2014,A,0,0,0
当我以常规方式将此文件加载到pandas.DataFrame中时:

import pandas as pd
aTeam = pd.DataFrame.from_csv("teamA-results.csv")
前两列“date”和“at”似乎被视为一列,我得到的数据帧格式不正确,如下所示:

aTeam.dtypes

at              object
goals.scored     int64
goals.lost       int64
result           int64
dtype: object

aTeam

    at  goals.scored    goals.lost  result
date                
2014-09-16  A   0   2   2
2014-01-10  H   4   1   1
2014-10-22  A   2   1   1
2014-04-11  H   3   3   0
2014-11-26  H   2   0   1
...
代码块没有清楚地反映出损坏情况,因此我附上了Jupyter笔记本的屏幕截图:

如您所见,“date”和“at”列似乎被视为对象类型的一列:

aTeam['at']

date
2014-09-16    A
2014-01-10    H
2014-10-22    A
2014-04-11    H
2014-11-26    H
2014-09-12    A
起初,我认为日期前后缺少引号是造成这个问题的原因,所以我添加了引号,但没有任何帮助,因此我引用了“at”列中的所有值,但仍然没有解决问题。我在CSV文件中尝试了单引号和双引号。有趣的是,在“date”和“at”中的值周围使用无引号或双引号可以产生与上面相同的结果。单引号被解释为“at”列中值的一部分,但不在日期列中:

添加
parse_dates=True
参数对数据帧没有任何影响


在R中使用这些CSV文件时,我没有遇到此类问题。我将非常感谢您在这方面的帮助。

我可以使用from\u CSV复制您的问题,问题是它使用列0作为索引,因此传递
index\u col=None
将起作用:

索引列:int或sequence,默认为0

用于索引的列。如果给定序列,则使用多索引。不同于read_表的默认值

输出:

         date at  goals.scored  goals.lost  result
0  16/09/2014  A             0           2       2
1  01/10/2014  H             4           1       1
2  22/10/2014  A             2           1       1
3  04/11/2014  H             3           3       0
4  26/11/2014  H             2           0       1
5  09/12/2014  A             4           1       1
6  25/02/2015  H             1           3       2
7  17/03/2015  A             2           0       1
8  19/08/2014  A             0           0       0
         date at  goals.scored  goals.lost  result
0  16/09/2014  A             0           2       2
1  01/10/2014  H             4           1       1
2  22/10/2014  A             2           1       1
3  04/11/2014  H             3           3       0
4  26/11/2014  H             2           0       1
5  09/12/2014  A             4           1       1
6  25/02/2015  H             1           3       2
7  17/03/2015  A             2           0       1
8  19/08/2014  A             0           0       0
使用Odr。根据您尝试的
quotechar
这是一个有效的参数,它可以正常工作,并且可能是您想要的:

import pandas as pd


aTeam = pd.read_csv("in.csv")
输出:

         date at  goals.scored  goals.lost  result
0  16/09/2014  A             0           2       2
1  01/10/2014  H             4           1       1
2  22/10/2014  A             2           1       1
3  04/11/2014  H             3           3       0
4  26/11/2014  H             2           0       1
5  09/12/2014  A             4           1       1
6  25/02/2015  H             1           3       2
7  17/03/2015  A             2           0       1
8  19/08/2014  A             0           0       0
         date at  goals.scored  goals.lost  result
0  16/09/2014  A             0           2       2
1  01/10/2014  H             4           1       1
2  22/10/2014  A             2           1       1
3  04/11/2014  H             3           3       0
4  26/11/2014  H             2           0       1
5  09/12/2014  A             4           1       1
6  25/02/2015  H             1           3       2
7  17/03/2015  A             2           0       1
8  19/08/2014  A             0           0       0
我在这里没有问题(使用Python2.7、16.2)。我使用了您粘贴的文本,在我的桌面上创建了一个.csv文件,并使用两种方法将其加载到Pandas中

import pandas as pd

a = pd.read_csv('test.csv')
b = pd.DataFrame.from_csv('test.csv')

>>>a
         date at  goals.scored  goals.lost  result
0  16/09/2014  A             0           2       2
1  01/10/2014  H             4           1       1
2  22/10/2014  A             2           1       1
3  04/11/2014  H             3           3       0
4  26/11/2014  H             2           0       1
5  09/12/2014  A             4           1       1
6  25/02/2015  H             1           3       2
7  17/03/2015  A             2           0       1
8  19/08/2014  A             0           0       0


>>>b
           at  goals.scored  goals.lost  result
date                                           
2014-09-16  A             0           2       2
2014-01-10  H             4           1       1
2014-10-22  A             2           1       1
2014-04-11  H             3           3       0
2014-11-26  H             2           0       1
2014-09-12  A             4           1       1
2015-02-25  H             1           3       2
2015-03-17  A             2           0       1
2014-08-19  A             0           0       0
在如何处理索引方面,您可以看到read_csv和from_csv命令之间的不同行为。然而,我看不到任何像你提到的问题。您可以尝试进一步定义read_csv参数,尽管我怀疑这会产生实质性的影响


您能否通过aTeam['at']查询数据帧,确认您的日期和“at”列被粉碎在一起,并查看结果如何?

我在帖子中添加了aTeam['at']的输出。看起来这里没有问题。您的索引名为“date”,这就是为什么在查询aTeam['at']时会显示“date”,但这只是索引。根据EdChum的建议,切换到read_csv,如上面的示例“a”所示。我想如果你做一个aTeam.descripe()你会发现一切都井然有序。你的解释似乎是正确的,很可能这就是为什么将index\u col=None添加到from\u csv解决了问题。我永远也不知道为什么我的答案会被否决。所以有时候对我来说可能是个谜……只是说,@tknepp那-1不是我的。我无法重现你的错误,1。不要使用csv中的
,因为它不再被更新,请使用熊猫。阅读csv,2。来自csv的
index\u col
参数默认为
index\u col=0
这就是第一列被视为索引的原因。当我加载您的数据时,我将日期作为索引,而不是'date'和'at'@Padraig,我删除了对read_csv doc页面的引用,因为它们是不相关的-我不想包含它。@Padraig:好吧!index_col=None解决了这个问题。谢谢。@Padraic,但即使添加index_col=None也不能解决这个问题。我不相信他的专栏会像声称的那样被粉碎,相反,当加载from_csv时,索引被命名为“date”,他感到困惑。您能确认这些列实际上是连接在一起的吗?@tnknapp,添加index_col=None确实解决了这个问题,date不再被视为索引,因此不确定您要添加什么mean@Padraic,当然,但OP认为索引和第一列被连接到一列中,我无法复制。如果你能重现这个问题,那将是非常有趣的。