【问题标题】:Convert datetime string to new columns of Day, Month, Year in pandas data frame将日期时间字符串转换为熊猫数据框中的日、月、年的新列
【发布时间】:2017-05-18 06:44:00
【问题描述】:

我是 python 新手,有一个非常简单(希望是直截了当!)的问题。

假设我有一个包含 3 列的数据框:时间(格式为 YYYY-MM-DDTHH:MM:SSZ)、设备 ID 和雨,但我需要将第一列“时间”变为三列“日”、“月”和“年”列,其值来自时间戳。

所以原始数据框看起来像这样:

     time                  device_id                              rain
     2016-12-27T00:00:00Z  9b839362-b06d-4217-96f5-f261c1ada8d6   NaN
     2016-12-28T00:00:00Z  9b839362-b06d-4217-96f5-f261c1ada8d6   0.2
     2016-12-29T00:00:00Z  9b839362-b06d-4217-96f5-f261c1ada8d6   NaN
     2016-12-30T00:00:00Z  9b839362-b06d-4217-96f5-f261c1ada8d6   NaN
     2016-12-31T00:00:00Z  9b839362-b06d-4217-96f5-f261c1ada8d6   NaN

但我试图让数据框看起来像这样:

     day  month  year  device_id                              rain
     27   12     2016  9b839362-b06d-4217-96f5-f261c1ada8d6   NaN
     28   12     2016  9b839362-b06d-4217-96f5-f261c1ada8d6   0.2
     29   12     2016  9b839362-b06d-4217-96f5-f261c1ada8d6   NaN
     30   12     2016  9b839362-b06d-4217-96f5-f261c1ada8d6   NaN
     31   12     2016  9b839362-b06d-4217-96f5-f261c1ada8d6   NaN

我不关心小时/秒/分钟,但需要原始时间戳中的这些值,我什至不知道从哪里开始。请帮忙!

这里有一些可重现的代码开始:

>> import pandas as pd 
>> df = pd.DataFrame([['2016-12-27T00:00:00Z', '9b839362-b06d-4217-96f5-f261c1ada8d6', 'NaN']], columns=['time', 'device_id', 'rain'])
>> print df
2016-12-27T00:00:00Z  9b849362-b06d-4217-96f5-f261c1ada8d6  NaN

【问题讨论】:

    标签: python datetime pandas dataframe multiple-columns


    【解决方案1】:

    只需用- 或T 拆分时间,前三个元素应对应年、月和日列,将其与其他两列连接将得到您需要的内容:

    pd.concat([df.drop('time', axis = 1), 
              (df.time.str.split("-|T").str[:3].apply(pd.Series)
              .rename(columns={0:'year', 1:'month', 2:'day'}))], axis = 1)
    


    接近@nlassaux 方法的另一种方法是:

    df['time'] = pd.to_datetime(df['time'])   
    df['year'] = df.time.dt.year
    df['month'] = df.time.dt.month
    df['day'] = df.time.dt.day
    df.drop('time', axis=1, inplace=True)
    

    【讨论】:

    【解决方案2】:

    最简洁的方法是使用内置的 pandas 日期时间函数。

    首先,将列转换为日期时间:

    df["time"] = pd.to_datetime(df["time"])
    

    然后,提取您的信息:

    df["day"] = df['time'].map(lambda x: x.day)
    df["month"] = df['time'].map(lambda x: x.month)
    df["year"] = df['time'].map(lambda x: x.year)
    

    【讨论】:

    • 谢谢!这正是我想要的。
    猜你喜欢
    • 1970-01-01
    • 2017-05-20
    • 2018-05-26
    • 2022-08-09
    • 1970-01-01
    • 2016-03-24
    • 2021-12-06
    • 2018-04-21
    • 2021-07-28
    相关资源
    最近更新 更多