2

我有以下输入 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 的任何解决方法?

4

2 回答 2

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
于 2013-01-09T14:54:11.847 回答
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所以我在 github 上发布了一个问题

于 2013-01-09T15:15:59.760 回答