首页 > 解决方案 > 使用 apply() 从函数返回多个值并将其存储在不同的列中

问题描述

我的初始数据框是这样的: 原始数据框

我的代码:

import pandas as pd 
import numpy as np
def visualize_weather():
    df=pd.read_csv('weather.csv')
    def break_date(date):
        day=date[-2:]
        month=date[-5:-3]
        year=date[:4]
        return day,month,year
    df['Day'],df['Month'],df['Year']=df['Date'].apply(break_date)
    return df[['Day','Month','Year','Date']]
visualize_weather()

我试图打破日、月和年的日期,并将它们存储到不同的列中。但我收到错误:

ValueError: too many values to unpack (expected 3)

有没有什么方法可以实现这一点,而无需为日、月和年制作 3 个不同的功能。

标签: pythonpandas

解决方案


您可以使用以下代码就地修改数据框。您应该直接更改函数内的数据框对象,否则您的更改将丢失。

import pandas as pd

df = pd.DataFrame(data={'dates': pd.bdate_range('2020-07-01', '2020-07-31', freq='B')})


def func(row):
    df.loc[row.name, 'Day'] = row['dates'].day
    df.loc[row.name, 'Month'] = row['dates'].month
    df.loc[row.name, 'Year'] = row['dates'].year
    print('Done')


df.apply(func, axis=1)

推荐阅读