熊猫弄乱DataFrame.from_csv上的日期列
我使用Python 3.4.0和pandas == 0.16.2。我有足球队的结果CSV文件,其中包含以下列:日期,在,目标.scored,goals.lost,结果。 'at'栏可以有三个值(H,A,N)中的一个,它们分别表示比赛是在球队主场,场外还是在中立位置进行的。这里有一个这样的文件头:熊猫弄乱DataFrame.from_csv上的日期列
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")
前两列“日期”和“在”似乎是看作一个和我得到这样一个格式错误的数据帧:
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笔记本屏幕截图:
正如你可以“在”看“日期”和列似乎被当作对象类型的一列:
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'的值周围不使用引号或双引号可以产生与上面相同的结果。单引号被解释为“在”列中的值的部分,但不是在日期列:
添加parse_dates=True
PARAM没有足够的数据帧产生任何影响。
当我在R中使用这些CSV文件时,我没有遇到过这样的问题。我将非常感谢这方面的任何帮助。
我这里没有问题(使用Python 2.7,熊猫16.2)。我用您粘贴文本,并创建了我的桌面上.csv文件,使用两种方法
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']一起被粉碎在一起,并看看是什么产量?
我可以复制您的问题使用from_csv,问题是它采用山坳0作为索引,以便通过index_col=None
将工作:
index_col:int或序列,默认为0
用于索引的列。如果给出序列,则使用MultiIndex。不同的默认从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
其实这是一个有效ARG可能想:
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
我不能再现你的错误1.不要使用'from_csv'它不再被更新,使用'pandas.read_csv',2.'from_csv'的'index_col'参数默认为'index_col = 0'这就是为什么第一列被视为索引。当我加载你的数据时,我得到的日期作为索引不是'日期'和'在' – EdChum