我有一个这样的数据框
df = [['1', '2019-12-13T15:15:52.786+05:30'], ['2', '2019-12-16T12:19:32.251+05:30']]
pd.DataFrame(df, columns=['ID', 'Timestamp'])
ID Timestamp
0 1 2019-12-13T15:15:52.786+05:30
1 2 2019-12-16T12:19:32.251+05:30
我想提取日期时间。我想对上百万条记录执行此操作
预期产量
ID Timestamp New_Timestamp
0 1 2019-12-13T15:15:52.786+05:30 2019-12-13 15:15:52
1 2 2019-12-16T12:19:32.251+05:30 2019-12-16 12:19:32
当我将to_datetime
与infer_datetime_format=True
一起使用时,它会给我这样的输出
2019-12-13 15:15:52.786000+05:30
2019-12-16 12:19:32.251000+05:30
答案 0 :(得分:2)
您可以尝试
>>> df.Timestamp = pd.to_datetime(df.Timestamp)
>>> df["New_Timestamp"] = df.Timestamp.dt.strftime("%Y-%m-%d %H:%M:%S")
>>> df
ID Timestamp New_Timestamp
0 1 2019-12-13 15:15:52.786000+05:30 2019-12-13 15:15:52
1 2 2019-12-16 12:19:32.251000+05:30 2019-12-16 12:19:32
更新
您也可以尝试regex
>>> df = [['1', '2019-12-13T15:15:52.786+05:30'], ['2', '2019-12-16T12:19:32.251+05:30']]
>>> df = pd.DataFrame(df, columns=['ID', 'Timestamp'])
>>> df.dtypes
ID object
Timestamp object
dtype: object
>>> df.Timestamp.str.replace(r'T',' ').str.replace(r'\..*','')
0 2019-12-13 15:15:52
1 2019-12-16 12:19:32
Name: Timestamp, dtype: object
答案 1 :(得分:0)
该值已经具有日期时间值,因此使用正则表达式可能效率不高。
因此,如果要删除小数点,请尝试以下操作:
df['Timestamp'] = pd.to_datetime(df['Timestamp'])
df['Timestamp'] = df['Timestamp'].apply(lambda x: x.replace(microsecond=0))
print(df)
ID Timestamp
0 1 2019-12-13 15:15:52+05:30
1 2 2019-12-16 12:19:32+05:30
并丢弃已经设置的时区并设置新的时区。
df['Timestamp'] = df['Timestamp'].dt.tz_convert(None)
print(df)
0 2019-12-13 09:45:52
1 2019-12-16 06:49:32
Name: Timestamp, dtype: datetime64[ns]
我希望这会有所帮助。