Python Pandas:解析为新的DateTime列

时间:2018-07-17 13:12:32

标签: python pandas datetime

如何将Python DataFrame的内容解析为一个新列,其中包含现有列作为一个datetime对象?

出于时间性能的原因,我想避免for循环(如果可能的话,也要避免使用lambda)。

import pandas as pd
df = pd.DataFrame({"century": [20, 20, 20], "my_date": [180105, 180106, 180107],
                   "my_time": ["17:01", "17:02", "17:03"]})

       century  my_date my_time
    0       20   180105   17:01
    1       20   180106   17:02
    2       20   180107   17:03

2 个答案:

答案 0 :(得分:2)

to_datetime与所有列结合使用,并按http://strftime.org/设置格式以提高性能:

df['date'] = pd.to_datetime(df['century'].astype(str) + 
                            df['my_date'].astype(str) + 
                            df['my_time'], format='%Y%m%d%H:%M')

print (df)
   century  my_date my_time                date
0       20   180105   17:01 2018-01-05 17:01:00
1       20   180106   17:02 2018-01-06 17:02:00
2       20   180107   17:03 2018-01-07 17:03:00

答案 1 :(得分:1)

您可以创建熊猫友好格式的一系列字符串。然后输入pd.to_datetime

df = pd.DataFrame({"century": [20, 20, 20], "my_date": [180105, 180106, 180107],
                   "my_time": ["17:01", "17:02", "17:03"]})

date_str = (df['century']*10**6 + df['my_date']).astype(str) + ' ' + df['my_time']

df['dt'] = pd.to_datetime(date_str)

print(df)

   century  my_date my_time                  dt
0       20   180105   17:01 2018-01-05 17:01:00
1       20   180106   17:02 2018-01-06 17:02:00
2       20   180107   17:03 2018-01-07 17:03:00