为什么pandas.DataFrame.apply打印出垃圾?

时间:2017-09-10 04:39:11

标签: python pandas dataframe apply

考虑这个简单的数据框:

   a  b
0  1  2
1  2  3

我执行了.apply

In [4]: df.apply(lambda x: [x.values])
Out[4]: 
a    [[140279910807944, 140279910807920]]
b    [[140279910807944, 140279910807920]]
dtype: object

In [5]: df.apply(lambda x: [x.values])
Out[5]: 
a    [[37, 37]]
b    [[37, 37]]
dtype: object

In [6]: df.apply(lambda x: [x.values])
Out[6]: 
a    [[11, 11]]
b    [[11, 11]]
dtype: object

为什么熊猫每次都会打印出垃圾?

我已经在v0.20验证了这种情况。

编辑:寻找答案,而不是解决方法。

3 个答案:

答案 0 :(得分:8)

它看起来像是bug,因此被打开Issue 17487

对我来说,工作添加tolist

print (df.apply(lambda x: [x.values.tolist()]))
a    [[1, 2]]
b    [[2, 3]]
dtype: object
print (df.apply(lambda x: [list(x.values)]))
a    [[1, 2]]
b    [[2, 3]]
dtype: object

答案 1 :(得分:6)

我没有答案......只是一个解决方法

f = lambda x: x.values.reshape(1, -1).tolist()

df.apply(f)

a    [[1, 2]]
b    [[2, 3]]
dtype: object

我将其追踪到pd.lib.reduce

pd.lib.reduce(df.values, lambda x: [list(x)])

array([list([[1, 2]]), list([[2, 3]]), list([['a', 'b']])], dtype=object)

对战

pd.lib.reduce(df.values, lambda x: [x])

array([list([array([None, None], dtype=object)]),
       list([array([None, None], dtype=object)]),
       list([array([None, None], dtype=object)])], dtype=object)

答案 2 :(得分:3)

另一种解决方法:

df.apply(lambda x: [list(x)])