2016-12-01 55 views
3

我有一個複雜的函數,爲Pandasdataframe中的每一行生成一個list。我想在這個新列中的每一行中輸入值mylist通過apply將一個靜態列表添加到一個新的Pandas Dataframe列

熊貓這樣做的能力似乎取決於起始數據框中的列數。

import pandas as pd 

df = pd.DataFrame(data=[['A', 'D'], 
         ['B', 'E'], 
         ['C', 'F']], 
        columns=['col1', 'col2']) 

df1 = pd.DataFrame(data=[['A', 'D', 'G'], 
         ['B', 'E', 'H'], 
         ['C', 'F', 'I']], 
        columns=['col1', 'col2', 'col3']) 

def add_list(row): 
    return [1,3, 3] 

df['mylist'] = df.apply(add_list, axis=1) 
print df 

收率:

col1 col2  list 
0 A D [1, 3, 3] 
1 B E [1, 3, 3] 
2 C F [1, 3, 3] 

該附加代碼產生ValueError: Wrong number of items passed 3, placement implies 1。爲什麼起始dataframe中的列數有影響?

df1['mylist'] = df1.apply(add_list, axis=1) 
print df1 

如果我改變功能到下方(添加一種元素),則不存在錯誤:

def add_list(row): 
    return [1,3, 3, 4] 

預期輸出:

col1 col2 col3  list 
0 A D G [1, 3, 3] 
1 B E H [1, 3, 3] 
2 C F I [1, 3, 3] 
+0

您要查找的實際輸出是什麼? –

+0

@JoeR增加了預期的輸出 – user2242044

回答

1

這是怪異的行爲。解決方案似乎是返回一個元組而不是一個列表。

def add_list(row): 
    return (1, 3, 3) 

df1['mylist'] = df1.apply(add_list, axis=1).apply(list) 

在最後一行中,您會注意到元組一旦在數據框中就被轉換爲列表。

+0

這真的很奇怪......這是代碼中的錯誤嗎? – user2242044

+0

看我的馬車!但有了這個解決方案,似乎沒有這麼大的事情 – AlexG

+0

是的,它的工作原理。如果需要,我可以使用'lambda'函數將這些項目轉換回列表。 – user2242044

相關問題