将带有GMT的时间戳转换为熊猫中的时间戳

时间:2019-12-21 08:37:36

标签: python python-3.x pandas datetime

我有一个这样的数据框

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_datetimeinfer_datetime_format=True一起使用时,它会给我这样的输出

2019-12-13 15:15:52.786000+05:30
2019-12-16 12:19:32.251000+05:30

2 个答案:

答案 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]

我希望这会有所帮助。