通过应用

时间:2016-12-01 20:47:35

标签: python python-2.7 pandas

我有一个复杂的函数,可以为list Pandas中的每一行生成dataframe。我想在名为list的新列中为每行mylist设置该值。

Pandas执行此操作的能力似乎取决于起始数据帧中的列数。

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]

1 个答案:

答案 0 :(得分:1)

这是奇怪的行为。解决方案似乎是返回一个元组而不是列表。

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

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

在最后一行中,您会注意到元组在数据框中时会转换为列表。