python - Pandas 弄乱了 DataFrame.from_csv 上的日期列

标签 python date csv pandas

我正在使用 Python 3.4.0 和 pandas==0.16.2。我有 CSV 文件中的足球队成绩,其中包含以下列:日期、at、goals.scored、goals.lost、结果。 “at”列可以具有三个值(H、A、N)之一,分别指示比赛是在球队的主场、客场还是中立 field 进行。这是一个此类文件的头部:

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
...

代码块没有清楚地反射(reflect)损坏情况,因此我附上了 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 参数对数据框没有任何影响。

当我在 R 中处理这些 CSV 文件时,我没有遇到此类问题。如果您对此提供帮助,我将不胜感激。

最佳答案

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

index_col:整数或序列,默认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)

输出:

         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 使用 . read_csv工作正常,并且基于您正在尝试 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

关于python - Pandas 弄乱了 DataFrame.from_csv 上的日期列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31536263/

相关文章:

python 稀疏 gmres 与输入参数混淆

python - pygame surface.blits 使用区域参数时

javascript - 如何验证日期是从今天开始 <javascript>

java - 如何测试使用 LocalDateTime.now() 创建的日期

file - 检查目录中是否存在多个文件 - matlab

php - 变更日志文件 : YAML vs JSON vs CSV

python - 如何按唯一组拆分数据框并保存到 csv

python - 安装 angularjs-server 模块时出错

python - 删除/覆盖导入

android - 无法解析日期