我正在使用 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”列似乎被视为对象类型的一列:
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_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/