python-2.7 - read_csv 在 Python 中使用 pandas 将 3 列日期转换为 1 列日期格式,例如 YYYY-MM-DD

标签 python-2.7 numpy pandas

使用以下代码:

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 列中的日期转换为格式为“YYYY-MM-DD”的 1 列日期。非常感谢任何对此的帮助。

最佳答案

读取 csv 后,构建您自己的日期列:

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

关于python-2.7 - read_csv 在 Python 中使用 pandas 将 3 列日期转换为 1 列日期格式,例如 YYYY-MM-DD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15778371/

相关文章:

python - 在 fedora 23 上安装 pip install psycopg2 时出错

python - 如何安装/修复在 python 3.4 上运行但在 3.5 上不起作用的失败的 numpy 安装?

python - 频率表作为 pandas 中的数据框

python - 从列表指向字典变量

python:了解简单for循环的多处理

python - Python 类中的两个构造函数

python - 模块 'scipy.optimize' 没有属性 'anneal'

Python 3 - ValueError : Found array with 0 sample(s) (shape=(0, 11)) 而 MinMaxScaler 要求至少为 1

python - 如何计算 Pandas 一行中所有元素的加权和?

Python dask_ml 线性回归 多个常量列检测到错误