【问题标题】:Using lambda or apply on multiple columns of a dataframe with lists contents使用 lambda 或应用于具有列表内容的数据框的多列
【发布时间】:2019-06-04 03:42:36
【问题描述】:

这可能是一个微不足道的问题。我有以下列包含列表的数据框。

import pandas as pd
df = pd.DataFrame({'time1': [['2000', '2300'], ['1000', '1100']], 'time2': [['2200', '2400'], ['800', '900']]})
print(df)

  time1         time2
0  [2000, 2300]  [2200, 2400]
1  [1000, 1100]    [800, 900]

列表中的值表示时间间隔。我正在尝试将所有这些元素转换为时间格式。

我想得到这样的东西:

time1         time2
20:00-23:00  22:00-24:00
10:00-11:00  8:00-9:00

【问题讨论】:

  • 您想要字符串类型的输出?还是熊猫 timedelta?
  • 没关系。字符串很好。
  • 我会使用 applymap 将函数应用于存储在数据框中的每个单独的值(在本例中为列表)。

标签: python pandas dataframe lambda


【解决方案1】:

我们可以在这里定义我们的函数来取消嵌套列表并使用: 分隔符分隔字符串,然后将其应用于每一列:

functime = lambda x: '-'.join([t[:-2] + ':' + t[-2:] for t in x])

for col in df.columns:
    df[col] = df[col].apply(functime)

print(df)
         time1        time2
0  20:00-23:00  22:00-24:00
1  10:00-11:00    8:00-9:00

或者

定义一个常规函数:

def functime2(x):
    val = '-'.join([t[:-2] + ':' + t[-2:] for t in x])

    return val

for col in df.columns:
    df[col] = df[col].apply(functime2)

         time1        time2
0  20:00-23:00  22:00-24:00
1  10:00-11:00    8:00-9:00

【讨论】:

    【解决方案2】:

    这是基于this 未接受的答案的一种间接方法。想法是将字符串拆分为小时和分钟,然后使用破折号 -: 加入它们

    import pandas as pd
    df = pd.DataFrame({'time1': [['2000', '2300'], ['1000', '1100']], 
                       'time2': [['2200', '2400'], ['800', '900']]})
    
    
    def convert_to_minutes(value):
        tim = []
        for val in value:
            hours, minutes = val[0:-2], val[-2:]
            tim.append(hours + ':' + minutes)
    
        return '-'.join(tim)
    
    df['time1'] = df['time1'].apply(convert_to_minutes)
    df['time2'] = df['time2'].apply(convert_to_minutes)
    

    输出

    print (df)
    
             time1        time2
     0  20:00-23:00  22:00-24:00
     1  10:00-11:00    8:00-9:00
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-28
      • 1970-01-01
      • 2016-06-14
      • 2021-03-20
      • 2017-04-22
      相关资源
      最近更新 更多