2

使用以下代码:

import pandas as pd

date_spec = {'transdate': [[0, 1, 2]]}
df2 = pd.read_csv('fruit.csv', header=None, parse_dates=date_spec)

print df2

我正在尝试读取如下所示的 csv 文件:

2011,1,10,Apple,Red,1500,
2011,1,13,Apple,Green,1500,
2011,1,13,Orange,Red,4000,
2011,1,26,Banana,Red,1000,
2011,2,2,Pear,Green,4000,
2011,2,10,Pear,Red,4000,
2011,3,3,Banana,Green,1000,
2011,3,3,Orange,Green,2200,
2011,6,3,Orange,Green,3300,

进入一个如下所示的 Numpy 数组:

2011-01-10,Apple,Red,1500
2011-01-13,Apple,Blue,1500
2011-01-13,Orange,Red,4000
2011-01-26,Banana,Red,1000
2011-02-02,Pear,Blue,4000
2011-02-10,Pear,Red,4000
2011-03-03,Banana,Blue,1000
2011-03-03,Orange,Blue,2200
2011-06-03,Orange,Blue,3300

但我的打印输出如下所示:

     X.1  X.2  X.3   X.4   X.5   X.6  X.7
0   2011    1   10  Apple  Red  1500  NaN
1   2011    1   13  Apple  Blue 1500  NaN
2   2011    1   13  Orange Red  4000  NaN
3   2011    1   26  Banana Red  1000  NaN
4   2011    2    2  Pear   Blue 4000  NaN
5   2011    2   10  Pear   Red  4000  NaN
6   2011    3    3  Banana Blue 1000  NaN
7   2011    3    3  Orange Blue 2200  NaN
8   2011    6    3  Orange Blue 3300  NaN

我尝试了几种变体,但无法将 3 列中的日期转换为 1 列日期,格式为“YYYY-MM-DD”。对此的任何帮助将不胜感激。

4

2 回答 2

1

阅读 csv 后,建立自己的date专栏:

In [59]: df['date'] = df.apply(lambda x:datetime.date(x[0],x[1], x[2]), axis=1)

In [60]: df
Out[60]: 
      0  1   2       3      4     5   6        date
0  2011  1  10   Apple    Red  1500 NaN  2011-01-10
1  2011  1  13   Apple  Green  1500 NaN  2011-01-13
2  2011  1  13  Orange    Red  4000 NaN  2011-01-13
3  2011  1  26  Banana    Red  1000 NaN  2011-01-26
4  2011  2   2    Pear  Green  4000 NaN  2011-02-02
5  2011  2  10    Pear    Red  4000 NaN  2011-02-10
6  2011  3   3  Banana  Green  1000 NaN  2011-03-03
7  2011  3   3  Orange  Green  2200 NaN  2011-03-03
8  2011  6   3  Orange  Green  3300 NaN  2011-06-03

然后删除无用的列:

In [61]: del df[0], df[1], df[2]

In [62]: df
Out[62]: 
        3      4     5   6        date
0   Apple    Red  1500 NaN  2011-01-10
1   Apple  Green  1500 NaN  2011-01-13
2  Orange    Red  4000 NaN  2011-01-13
3  Banana    Red  1000 NaN  2011-01-26
4    Pear  Green  4000 NaN  2011-02-02
5    Pear    Red  4000 NaN  2011-02-10
6  Banana  Green  1000 NaN  2011-03-03
7  Orange  Green  2200 NaN  2011-03-03
8  Orange  Green  3300 NaN  2011-06-03
于 2013-04-03T03:52:06.760 回答
1

read_csvparse_dates参数应该是列表中包含值的字典不是列表列表):

date_spec = {'transdate': [0, 1, 2]}  # a list

df2 = pd.read_csv('fruit.csv', header=None, parse_dates=date_spec)

In [3]: del df2[6]  # Note in 0.11 this may not be needed

In [4]: df2
Out[4]: 
                  foo       3      4     5
0 2011-01-10 00:00:00   Apple    Red  1500
1 2011-01-13 00:00:00   Apple  Green  1500
2 2011-01-13 00:00:00  Orange    Red  4000
3 2011-01-26 00:00:00  Banana    Red  1000
4 2011-02-02 00:00:00    Pear  Green  4000
5 2011-02-10 00:00:00    Pear    Red  4000
6 2011-03-03 00:00:00  Banana  Green  1000
7 2011-03-03 00:00:00  Orange  Green  2200
8 2011-06-03 00:00:00  Orange  Green  3300
于 2013-04-03T07:44:50.387 回答