Pandas把日期栏搞砸了数据帧。来自

2024-06-06 19:42:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是python3.4.0和pandas==0.16.2。我在CSV文件中有足球队的结果,文件中有以下列:日期,时间,进球。得分, 目标。丢失,结果。“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

当我把这个文件加载到熊猫.DataFrame以通常的方式:

^{pr2}$

前两列“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 columns corruption after csv_read

如您所见,“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”列中被解释为值的一部分,而不是在“日期”列中:

enter image description here

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

我没有这样的问题,当我与这些CSV文件在R。我将感谢任何帮助,这一个。在


Tags: 文件csv数据dateobjectresultat引号
2条回答

我在这里没有问题(使用python2.7,Pandas 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”列是被粉碎在一起的吗?在

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

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

Column to use for index. If a sequence is given, a MultiIndex is used. Different default from read_table

import pandas as pd
aTeam = pd.DataFrame().from_csv("in.csv",index_col=None)

输出:

^{pr2}$

Odr using.read_csv工作正常,基于您正在尝试的quotechar这是一个有效的参数,这可能是您想要的:

import pandas as pd


aTeam = pd.read_csv("in.csv")

输出:

^{pr2}$

相关问题 更多 >