来自多个列的python日期和日期时间

来自多个列的python日期和日期时间,python,pandas,datetime,Python,Pandas,Datetime,我有一些数据看起来像: key DATE - DAY DATE - MONTH DATE - YEAR GMT HRS GMT MINUTES 1 2 29 2 2016 2 2 2 3 29 2 2016 2 2 3 4

我有一些数据看起来像:

        key  DATE - DAY  DATE - MONTH  DATE - YEAR  GMT HRS  GMT MINUTES  
1        2          29             2         2016        2            2   
2        3          29             2         2016        2            2   
3        4          29             2         2016        2            2   
4        5          29             2         2016        2            2   
5        6          29             2         2016        2            2   
6        7          29             2         2016        2            2   
7        8          29             2         2016        2            3   
8        9          29             2         2016        2            3   
9       10          29             2         2016        2            3   

   GMT SECONDS  
1           54                  
2           55                 
3           56                 
4           57                   
5           58              
6           59          
7            0      
8            1  
9            2 
起初,数据是类型
float
,年份是格式
16
,所以我做了:

t['DATE - MONTH'] = t['DATE - MONTH'].astype(int)
t['DATE - YEAR'] = t['DATE - YEAR'].astype(int)
t['DATE - YEAR'] = t['DATE - YEAR']+2000
t['DATE - DAY'] = t['DATE - DAY'].astype(int)
^注:我也感到困惑,为什么在使用索引号而不是列名时,您只处理似乎是临时表的内容,即您可以打印所需的结果,但它没有更改数据帧

然后我尝试了两种方法:

t['Date'] = pd.to_datetime(dict(year=t['DATE - YEAR'], month = t['DATE - MONTH'], day = t['DATE - DAY']))

t['Date'] = pd.to_datetime((t['DATE - YEAR']*10000+t['DATE - MONTH']*100+t['DATE - DAY']).apply(str),format='%Y%m%d')
两者都返回:

ValueError:无法汇编日期时间:时间数据20000000与格式“%Y%m%d”不匹配(匹配)

我想创建一个日期列(然后在对带有3列的datetime列使用类似的逻辑之后)

有什么问题


编辑:我有错误的数据,并添加了
errors='concurve'
来处理这些行

首先重命名所有列,按dict的值过滤并使用:

从数据帧的多个列组装日期时间。这些键可以是常见的缩写,如['year'、'month'、'day'、'minute'、'second'、'ms'、'us'、'ns'])或相同的复数形式


详情:

print (df.rename(columns=d)[list(d.values())])
   day  month  second  year  minute  hour
1   29      2      54  2016       2     2
2   29      2      55  2016       2     2
3   29      2      56  2016       2     2
4   29      2      57  2016       2     2
5   29      2      58  2016       2     2
6   29      2      59  2016       2     2
7   29      2       0  2016       3     2
8   29      2       1  2016       3     2
9   29      2       2  2016       3     2

相同的错误:
ValueError:无法汇编日期时间:时间数据20000000与格式“%Y%m%d”(匹配)
这意味着有一些坏数据,所以需要
df['datetime']=pd.to_datetime(df.rename(columns=d)[list(d.values())],errors='concure')
-它将不可解析的数据替换为
NaT['DATE-MONTH'].unique()
和found
Out[164]:数组([2,3,0,1,4,5],dtype=int64)
第0个月显然不起作用!
print (df)
   key  DATE - DAY  DATE - MONTH  DATE - YEAR  GMT HRS  GMT MINUTES  \
1    2          29             2         2016        2            2   
2    3          29             2         2016        2            2   
3    4          29             2         2016        2            2   
4    5          29             2         2016        2            2   
5    6          29             2         2016        2            2   
6    7          29             2         2016        2            2   
7    8          29             2         2016        2            3   
8    9          29             2         2016        2            3   
9   10          29             2         2016        2            3   

   GMT SECONDS            datetime  
1           54 2016-02-29 02:02:54  
2           55 2016-02-29 02:02:55  
3           56 2016-02-29 02:02:56  
4           57 2016-02-29 02:02:57  
5           58 2016-02-29 02:02:58  
6           59 2016-02-29 02:02:59  
7            0 2016-02-29 02:03:00  
8            1 2016-02-29 02:03:01  
9            2 2016-02-29 02:03:02  
print (df.rename(columns=d)[list(d.values())])
   day  month  second  year  minute  hour
1   29      2      54  2016       2     2
2   29      2      55  2016       2     2
3   29      2      56  2016       2     2
4   29      2      57  2016       2     2
5   29      2      58  2016       2     2
6   29      2      59  2016       2     2
7   29      2       0  2016       3     2
8   29      2       1  2016       3     2
9   29      2       2  2016       3     2