【问题标题】:Pandas: Extract date from unconventional timestamp -- YYY/MM/DD:HH:MM:SS AMPandas:从非常规时间戳中提取日期 -- YYYY/MM/DD:HH:MM:SS AM
【发布时间】:2020-06-01 20:11:34
【问题描述】:

我有以下格式的数据:

d = {'Name': ['bob', 'george'], 'date1': ['2014/05/12:12:00:00 AM', '2014/05/15:12:00:00 AM'], 'date2': ['2014/08/31:11:59:59 PM', '2014/08/12:11:59:59 PM']}
df = pd.DataFrame(data=d)

   Name                   date1                   date2
0     bob  2014/05/12:12:00:00 AM  2014/08/31:11:59:59 PM
1  george  2014/05/15:12:00:00 AM  2014/08/12:11:59:59 PM

如何操作两个日期列以获得以下格式?

预期输出:

     Name       date1       date2
0     bob  2014-05-12  2014-08-31
1  george  2014-05-15  2014-08-12

【问题讨论】:

  • 你想要日期作为时间戳还是只是字符串?

标签: python pandas dataframe timestamp


【解决方案1】:

pd.to_datetimeformat 一起使用:

In [1177]: df.date1 = pd.to_datetime(df.date1, format='%Y/%m/%d:%I:%M:%S %p').dt.date     
In [1178]: df.date2 = pd.to_datetime(df.date2, format='%Y/%m/%d:%I:%M:%S %p').dt.date  

In [1179]: df    
Out[1179]: 
     Name       date1       date2
0     bob  2014-05-12  2014-08-31
1  george  2014-05-15  2014-08-12

【讨论】:

  • 它会起作用,因为您只对日期部分感兴趣。但是,该列采用 12 小时格式,而不是 24 小时格式。
【解决方案2】:

pandas.to_datetimeformat 参数一起使用:

df['date1'] = pandas.to_datetime(df['date1'], format='%Y/%m/%d:%H:%M:%S %p')

熊猫文档:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.to_datetime.html

格式化文档:https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior

【讨论】:

    【解决方案3】:

    你可以这样做:

    dates = ['date1','date2']
    df[dates] = df[dates].apply(lambda x:pd.to_datetime(x).dt.normalize())
    

    输出:

         Name      date1      date2
    0     bob 2014-05-12 2014-08-31
    1  george 2014-05-15 2014-08-12
    

    【讨论】:

      【解决方案4】:

      试试这个:

      d = {'Name': ['bob', 'george'], 'date1': ['2014/05/12:12:00:00 AM', '2014/05/15:12:00:00 AM'], 'date2': ['2014/08/31:11:59:59 PM', '2014/08/12:11:59:59 PM']}
      df = pd.DataFrame(data=d)
      df['date1'] = pd.to_datetime(df['date1'], format='%Y/%m/%d:%H:%M:%S %p').dt.date
      df['date2'] = pd.to_datetime(df['date2'], format='%Y/%m/%d:%H:%M:%S %p').dt.date
      print(df)
      
           Name       date1       date2
      0     bob  2014-05-12  2014-08-31
      1  george  2014-05-15  2014-08-12
      

      【讨论】:

        【解决方案5】:

        给你:

        import pandas as pd
        from datetime import datetime
        
        d = {'Name': ['bob', 'george'], 'date1': ['2014/05/12:12:00:00 AM', '2014/05/15:12:00:00 AM'], 'date2': ['2014/08/31:11:59:59 PM', '2014/08/12:11:59:59 AM']}
        df = pd.DataFrame(data=d)
        date_extractor = lambda dts : datetime.strptime(dts, '%Y/%m/%d:%I:%M:%S %p').date()
        df['date1'] = df['date1'].apply(date_extractor)
        df['date2'] = df['date2'].apply(date_extractor)
        print(df)
        

        输出:

             Name       date1       date2
        0     bob  2014-05-12  2014-08-31
        1  george  2014-05-15  2014-08-12
        

        【讨论】:

          猜你喜欢
          • 2011-09-02
          • 2018-11-28
          • 2021-04-28
          • 1970-01-01
          • 2017-08-21
          • 2017-02-01
          相关资源
          最近更新 更多