【问题标题】:Convert Timestamp with GMT to Timestamp in Pandas将带有 GMT 的时间戳转换为 Pandas 中的时间戳
【发布时间】:2019-12-21 08:37:36
【问题描述】:

我有一个这样的数据框

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

【问题讨论】:

    标签: python python-3.x pandas datetime


    【解决方案1】:

    你可以试试

    >>> 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
    

    【讨论】:

    • pd.to_datetime 运行很慢,因为我有数百万条记录
    • Timestamp 是 object 类型的,所以必须先将其转换为 str
    • str 将显示为 dtype object。我认为您不需要转换为str
    • 我需要,我试过它给我一个错误,需要先运行 astype,这又是一个昂贵的操作
    • 我已经发布了整个 repl 输出。
    【解决方案2】:

    这已经有一个日期时间值,因此使用正则表达式可能效率低下。

    所以,如果要删除小数点,请尝试以下操作:

    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]
    

    我希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-18
      • 1970-01-01
      • 2016-11-12
      • 2018-09-17
      • 1970-01-01
      • 2012-07-15
      • 2018-03-07
      • 1970-01-01
      相关资源
      最近更新 更多