2016-12-01 270 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

相关问题