【问题标题】:Change column in df from column from another从另一个列更改 df 中的列
【发布时间】:2016-10-25 16:38:25
【问题描述】:

我有数据:

                 date                      id 
0     2016-06-17 06:25:05    yans.bouts@yandex.ru    
1     2016-06-17 06:25:07    yans.bouts@yandex.ru       
2     2016-06-17 06:25:10    titovtanya@yandex.ru         
3     2016-06-17 06:25:11    titovtanya@yandex.ru

其他数据

Email,UTC shift
yans.bouts@yandex.ru,5
inkin_sam@mail.ru,3
titovtanya@yandex.ru,3
dasha.dasha.kovaleva@mail.ru,2

我需要将UTC shift 添加到第一个文件datehours。 期望输出:

                     date                      id 
0     2016-06-17 11:25:05    yans.bouts@yandex.ru    
1     2016-06-17 11:25:07    yans.bouts@yandex.ru       
2     2016-06-17 09:25:10    titovtanya@yandex.ru         
3     2016-06-17 09:25:11    titovtanya@yandex.ru

我将date 转换为日期时间,但我不知道如何将UTC shift 转换为小时。

【问题讨论】:

    标签: python excel datetime pandas dataframe


    【解决方案1】:

    如果dtype 不是datetimemerge,则首先需要将to_datetimedate 转换为idEmail 列。然后转换to_timedeltaUTC shift,添加到date 和最后一个drop 不必要的列:

    import pandas as pd
    
    
    df1 = pd.DataFrame({'date': {0: '2016-06-17 06:25:05', 1: '2016-06-17 06:25:07', 2: '2016-06-17 06:25:10', 3: '2016-06-17 06:25:11'}, 
                          'id': {0: 'yans.bouts@yandex.ru', 1: 'yans.bouts@yandex.ru', 2: 'titovtanya@yandex.ru', 3: 'titovtanya@yandex.ru'}})
    
    df2 = pd.DataFrame({'Email': {0: 'yans.bouts@yandex.ru', 1: 'inkin_sam@mail.ru', 2: 'titovtanya@yandex.ru', 3: 'dasha.dasha.kovaleva@mail.ru'}, 
                        'UTC shift': {0: 5, 1: 3, 2: 3, 3: 2}})
    
    print (df1)
                      date                    id
    0  2016-06-17 06:25:05  yans.bouts@yandex.ru
    1  2016-06-17 06:25:07  yans.bouts@yandex.ru
    2  2016-06-17 06:25:10  titovtanya@yandex.ru
    3  2016-06-17 06:25:11  titovtanya@yandex.ru
    
    print (df2)
                              Email  UTC shift
    0          yans.bouts@yandex.ru          5
    1             inkin_sam@mail.ru          3
    2          titovtanya@yandex.ru          3
    3  dasha.dasha.kovaleva@mail.ru          2
    
    df1['date'] = pd.to_datetime(df1.date)
    
    df = pd.merge(df1, df2, left_on='id', right_on='Email')
    df['date'] += pd.to_timedelta(df['UTC shift'], unit='H')
    df.drop(['Email','UTC shift'], axis=1, inplace=True)
    print (df)
                     date                    id
    0 2016-06-17 11:25:05  yans.bouts@yandex.ru
    1 2016-06-17 11:25:07  yans.bouts@yandex.ru
    2 2016-06-17 09:25:10  titovtanya@yandex.ru
    3 2016-06-17 09:25:11  titovtanya@yandex.ru
    

    【讨论】:

    • 对于某些值,它返回NaT
    • 这个有问题的值是什么?
    • 我转换 df1['date'] = pd.to_datetime(df1.date) 没有问题。但是到 24 str 效果很好,但是到 11000 它返回 NaT
    • 11000 ? date 列中的值仅是 11000?那么期望的输出是什么?
    • 我在df 中有 11000 个字符串。所以我在df1['date'] 中有 11000 个值,我应该转换所有这些
    【解决方案2】:

    试试这个:

    df['date'] += pd.Timedelta(df['UTC shift'], unit='H')
    

    【讨论】:

      猜你喜欢
      • 2020-12-13
      • 1970-01-01
      • 1970-01-01
      • 2022-12-03
      • 2020-04-06
      • 1970-01-01
      • 1970-01-01
      • 2011-04-18
      • 2021-10-06
      相关资源
      最近更新 更多