在熊猫的日期时间值列中混合日期和月份

时间:2019-09-03 10:26:04

标签: python pandas

我想以大熊猫格式设置日期,以具有年月日。我的约会是从四月到九月。我没有1月,2月等的值,但有时我的大熊猫将日读为月,将月读为日。看一下索引16或84。

6    2019-08-26 15:10:00
7    2019-08-25 13:22:00
8    2019-08-24 16:06:00
9    2019-08-23 15:13:00
10   2019-08-22 14:24:00
11   2019-08-21 14:02:00
12   2019-08-16 12:31:00
13   2019-08-15 15:31:00
14   2019-08-14 14:46:00
15   2019-08-13 17:13:00
16   2019-11-08 15:54:00 
17   2019-10-08 10:07:00
68   2019-06-06 11:22:00
69   2019-05-06 15:16:00
70   2019-01-06 17:02:00
75   2019-05-21 09:01:00
76   2019-05-19 16:52:00
77   2019-05-15 15:40:00
78   2019-10-05 13:34:00
81   2019-06-05 11:55:00
82   2019-03-05 17:28:00
83   2019-02-05 18:01:00
84   2019-01-05 17:05:00
85   2019-01-05 09:57:00
86   2019-04-30 10:16:00
87   2019-04-29 17:51:00
88   2019-04-27 17:42:00

如何解决此问题? 我想使用日期类型的值*(year-month-day),而没有时间,以便可以按天或按月分组。

我已经尝试过了,但是不起作用:

df['Created'] = pd.to_datetime(df['Created'], format = 'something')

对于按月分组,我尝试了以下方法:

df['Created'] = df['Created'].dt.to_period('M')

2 个答案:

答案 0 :(得分:1)

样本数据的解决方案-您可以使用errors='coerce'两种格式创建两种可能的日期时间,以解决不匹配的缺失值,然后首先替换第二个SeriesYYYY-DD-MM)中的缺失值Series.combine_firstSeries.combine_firstSeriesYYYY-MM-DD):

a = pd.to_datetime(df['Created'], format = '%Y-%m-%d %H:%M:%S', errors='coerce')
b = pd.to_datetime(df['Created'], format = '%Y-%d-%m %H:%M:%S', errors='coerce')

df['Created'] = b.combine_first(a).dt.to_period('M')
#alternative
#df['Created'] = b.fillna(a).dt.to_period('M')

print (df)
    Created
6   2019-08
7   2019-08
8   2019-08
9   2019-08
10  2019-08
11  2019-08
12  2019-08
13  2019-08
14  2019-08
15  2019-08
16  2019-08
17  2019-08
68  2019-06
69  2019-06
70  2019-06
75  2019-05
76  2019-05
77  2019-05
78  2019-05
81  2019-05
82  2019-05
83  2019-05
84  2019-05
85  2019-05
86  2019-04
87  2019-04
88  2019-04

答案 1 :(得分:1)

我创建了一个虚拟数据框来对此进行解析。尝试strftime

from datetime import datetime
import time
import pandas as pd

time1 = datetime.now()
time.sleep(6) 
time2 = datetime.now()


df = pd.DataFrame({'Created': [time1, time2]})

df['Created2'] =  df['Created'].apply(lambda x: x.strftime('%Y-%m-%d'))

print(df.head())