Python 通过apply将静态列表添加到新的Dataframe列
我有一个复杂的函数,它为数据帧中的每一行生成一个Python 通过apply将静态列表添加到新的Dataframe列,python,python-2.7,pandas,Python,Python 2.7,Pandas,我有一个复杂的函数,它为数据帧中的每一行生成一个列表。我想将该列表作为名为mylist的新列中每一行的值 熊猫执行此操作的能力似乎取决于起始数据帧中的列数 import pandas as pd df = pd.DataFrame(data=[['A', 'D'], ['B', 'E'], ['C', 'F']], columns=['col1', 'col2']
列表。我想将该列表
作为名为mylist
的新列中每一行的值
熊猫执行此操作的能力似乎取决于起始数据帧中的列数
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:传递的项目数错误3,放置意味着1
。为什么起始数据帧中的列数会产生影响
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]
这是一种奇怪的行为。一种解决方案似乎是返回一个元组而不是列表
def add_list(row):
return (1, 3, 3)
df1['mylist'] = df1.apply(add_list, axis=1).apply(list)
在最后一行中,您会注意到元组一旦进入数据帧,就会转换为列表。您要查找的实际输出是什么?@JoeR添加了预期输出Uh,这真的很奇怪……这是代码中的一个错误吗?在我看来似乎有问题!但是这个解决方案看起来不是什么大交易是的,它很有效。然后,如果需要,我可以使用lambda
函数将项目转换回列表。