我有以下输入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的任何解决方法?
答案 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)
这是一种可以处理更多案例的方法(当UnitCost
,Cost
等中有一些数据时)。
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。