pandas.read_csv()空(默认)值的奇怪行为

时间:2013-01-09 14:44:49

标签: python csv pandas

我有以下输入trans.csv文件:

Date,Currenncy,Symbol,Type,Units,UnitPrice,Cost,Tax
2012-03-14,USD,AAPL,BUY,1000
2012-05-12,USD,SBUX,SELL,500

字段UnitPrice,Cost和Tax是可选的。如果未指定它们,我希望在DataFrame单元格中使用NaN。

我用以下内容读取了csv文件:

t = pandas.read_csv('trans.csv', parse_dates=True, index_col=0)

并得到以下结果:

           Currenncy Symbol  Type  Units   UnitPrice       Cost       Tax
Date                                                                     
2012-03-14       USD   AAPL   BUY   1000  2012-05-12  012-05-12  12-05-12
2012-02-05       USD   SBUX  SELL    500         NaN        NaN       NaN

为什么第一行没有NaN并重复日期? 为未指定的字段获取NaN的任何解决方法?

2 个答案:

答案 0 :(得分:3)

您的CSV文件格式错误。在Pandas 0.10中,我得到了和你一样的答案,虽然我承认它确实非常非常奇怪,但你不应该为它提供错误的数据。

Date,Currenncy,Symbol,Type,Units,UnitPrice,Cost,Tax
2012-03-14,USD,AAPL,BUY,1000,,,
2012-05-12,USD,SBUX,SELL,500,,,

返回预期的

>>> import pandas as pd
>>> t = pd.read_csv('pandas_test', parse_dates=True, index_col=0)
>>> t
           Currenncy Symbol  Type  Units  UnitPrice  Cost  Tax
Date                                                          
2012-03-14       USD   AAPL   BUY   1000        NaN   NaN  NaN
2012-05-12       USD   SBUX  SELL    500        NaN   NaN  NaN

答案 1 :(得分:2)

这是一种可以处理更多案例的方法(当UnitCostCost等中有一些数据时)。

In [1]: df = pd.read_csv('trans.csv', header=None)

In [2]: df.columns = df.ix[0]

In [3]: df[1:].set_index('Date')
Out[3]: 
           Currenncy Symbol  Type Units UnitPrice Cost  Tax
Date                                                       
2012-03-14       USD   AAPL   BUY  1000       NaN  NaN  NaN
2012-05-12       USD   SBUX  SELL   500       NaN  NaN  NaN
2012-05-12       USD   SBUX  SELL   500       NaN  NaN  NaN

值得注意的是,这些列的dtype将为object

但是,我认为这应该由to_csv抓住,所以我发布为an issue on github