将返回的元组分配给数组的不同列

时间:2019-04-23 22:20:42

标签: python python-3.x pandas

我有一个名为date_encode的函数,它采用年-月-日格式(字符串)的日期。该函数解析该字符串,并以单独的整数返回日,月和年。

def date_encode(dateString):
    dateTimeObj = datetime.strptime(dateString, '%Y-%m-%d')
    return int(dateTimeObj.day), int(dateTimeObj.month), int(dateTimeObj.year)

此函数当前返回一个元组。我想做的就是将这三个返回值分配给单独的数组,这样我就可以拥有单独的“天”,“月”和“年”数组。当我尝试以下操作时,出现“ ValueError:太多值无法解包(预期为3)”错误:

days, months, years = data['Date'].apply(date_encode)

正确执行此操作的最有效方法是什么(我将遍历此数组的数十万行)。

1 个答案:

答案 0 :(得分:0)

使用zip(*iterables)Docs

以下是一个示例:

import pandas as pd
from datetime import datetime

df = pd.DataFrame({'Date': ['2019-04-24', '2019-05-25', '2019-06-26']})

def date_encode(dateString):
    dateTimeObj = datetime.strptime(dateString, '%Y-%m-%d')
    return dateTimeObj.day, dateTimeObj.month, dateTimeObj.year

df['day'], df['month'], df['year'] = zip(*df['Date'].apply(date_encode))

输入:

         Date
0  2019-04-24
1  2019-05-25
2  2019-06-26

输出:

         Date  day  month  year
0  2019-04-24    24       4   2019
1  2019-05-25    25       5   2019
2  2019-06-26    26       6   2019