【问题标题】:adding multiple columns to a dataframe using df.apply and a lambda function使用 df.apply 和 lambda 函数向数据框添加多列
【发布时间】:2019-12-19 14:43:51
【问题描述】:

我正在尝试使用 df.apply 和 lambda 函数向现有数据框添加多个列。我能够一一添加列,但无法将所有列一起添加。 我的代码



def get_player_stats(player_name):
    print(player_name)
    resp = requests.get(player_id_api + player_name)
    if resp.status_code != 200:
        # This means something went wrong.
        print('Error {}'.format(resp.status_code))

    result = resp.json()
    player_id = result['data'][0]['pid']

    resp_data = requests.get(player_data_api + str(player_id))
    if resp_data.status_code != 200:
        # This means something went wrong.
        print('Error {}'.format(resp_data.status_code))

    result_data = resp_data.json()

    check1 = len(result_data.get('data',None).get('batting',None))
#    print(check1)
    check2 = len(result_data.get('data',{}).get('batting',{}).get('ODIs',{}))
#    check2 = result_data.get(['data']['batting']['ODIs'],None)
#    print(check2)
    if check1 > 0 and check2 > 0:
        total_6s = result_data['data']['batting']['ODIs']['6s']
        total_4s = result_data['data']['batting']['ODIs']['4s']
        average = result_data['data']['batting']['ODIs']['Ave']
        total_innings = result_data['data']['batting']['ODIs']['Inns']
        total_catches = result_data['data']['batting']['ODIs']['Ct']
        total_stumps = result_data['data']['batting']['ODIs']['St']
        total_wickets = result_data['data']['bowling']['ODIs']['Wkts']
        print(average,total_innings,total_4s,total_6s,total_catches,total_stumps,total_wickets)    
        return np.array([average,total_innings,total_4s,total_6s,total_catches,total_stumps,total_wickets])
    else:
        print('No data for player')
        return '','','','','','',''


cols = ['Avg','tot_inns','tot_4s','tot_6s','tot_cts','tot_sts','tot_wkts']
for col in cols:
    players_available[col] = ''

players_available[cols] = players_available.apply(lambda x: get_player_stats(x['playerName']) , axis =1) 

我已尝试将列显式添加到数据框中,但仍然出现错误

ValueError: Must have equal len keys and value when setting with an iterable

有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: python pandas lambda apply


    【解决方案1】:

    这很棘手,因为在 pandas 中,apply 方法会随着版本的变化而演变。

    在我的版本 (0.25.3) 和其他最新版本中,如果函数返回 pd.Series 对象,那么它可以工作。

    在您的代码中,您可以尝试更改函数中的返回值:

    return pd.Series([average,total_innings,total_4s,total_6s,
                      total_catches,total_stumps,total_wickets])
    
    return pd.Series(['','','','','','',''])
    

    【讨论】:

    • @cvg 应该可以工作,您可以试一试,如果问题仍然存在,请告诉我?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多