亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在python中,通過使用lambda將空列表添加到dataframe列會引發valueError

在python中,通過使用lambda將空列表添加到dataframe列會引發valueError

米琪卡哇伊 2021-04-25 02:57:14
我能夠在綜合數據上重現該錯誤:import pandas as pdfrom datetime import datetimedf1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],                    'B': ['B0', 'B1', 'B2', 'B3'],                    'C': [datetime.now(), datetime.now(), datetime.now(), datetime.now()],                    'D': ['D0', 'D1', 'D2', 'D3']},                   index=[0, 1, 2, 3]);df2 = pd.DataFrame({'A': ['A1', 'A2', 'A3', 'A4'],                    'E': ['E1', 'E2', 'E3', 'E4']},                   index=[0,1,2,3]);df = pd.merge(df1, df2, how='left', on=['A', 'A']);def getList(row):    r = [];    if row["A"] == "A1": r.append("test-01");    if row["B"] == "B1": r.append("test-02");    if row["B"] == "B2": r.append("test-03");    return r;df["NEW_COLUMN"] = df.apply(lambda row: getList(row), axis = 1);原始帖子:我想基于多種條件在pandas數據框中創建一個新列。新列的值應為list。但是我收到“ ValueError:指定索引傳遞的空數據。” 如果列表為空。def getList(p_row):  r = [];  if p_row["field1"] > 0: r.append("x");  ...  return r;df["new_list_field"] = df.apply(lambda row: getList(row), axis = 1);完整的錯誤:ValueError追溯(最近一次通話最近)C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ pandas \ core \ internals.py在create_block_manager_from_arrays(數組,名稱,軸)4636中嘗試:-> 4637塊= form_blocks(數組,名稱) ,軸)4638 mgr = BlockManager(塊,軸)C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ pandas \ core \ internals.py in form_blocks(數組,名稱,軸)4728如果len(object_items)> 0:-> 4729 object_blocks = _simple_blockify(object_items,np.object_ )4730 blocks.extend(object_blocks)C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ pandas \ core \ internals.py in _simple_blockify(tuples,dtype)4758“”“-> 4759值,位置= _stack_arrays(tuples,dtype)4760C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ pandas \ core \ internals.py in _stack_arrays(tuples,dtype)4822 for i,enr in enumerate(arrays):-> 4823 Stacked [i] = _asarray_compat(arr) 4824ValueError:無法將輸入數組從形狀(2)廣播到形狀(195)
查看完整描述

2 回答

?
人到中年有點甜

TA貢獻1895條經驗 獲得超7個贊

最終制作了一個列表列表,將其轉換為,pd.Series()然后將其分配給新列。字典key2list返回可變長度列表作為值:


new_col_list = []


for _, row in my_df.iterrows():

    new_col_list.append(key2list[row[u'key']])


my_df[u'new_col'] = pd.Series(new_col_list)


查看完整回答
反對 回復 2021-05-11
?
慕姐4208626

TA貢獻1852條經驗 獲得超7個贊

該函數的輸出長度因行而異,但是您不能將不等長的列表分配給新的pandas列。您可以通過以下方式進行驗證:


for idx,row in df.iterrows():

    print(getList(row))

一種替代方法是將輸出轉換為字符串:


def getListString(row):

    r = ''

    if row["A"] == "A1": r+="test-01"

    if row["B"] == "B1": r+="test-02"

    if row["B"] == "B2": r+="test-03"

    return r


查看完整回答
反對 回復 2021-05-11
  • 2 回答
  • 0 關注
  • 275 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號