【发布时间】:2014-04-12 01:41:31
【问题描述】:
在实际情况中可能不是排列数据的最佳方式,但它是一个很好的例子:
In [16]:
import operator
In [17]:
DF=pd.DataFrame({'Val1':[[2013, 37722.322],[1998, 32323.232]],
'Val2':[[2013, 37722.322],[1998, 32323.232]]})
In [18]:
print DF
Val1 Val2
0 [2013, 37722.322] [2013, 37722.322]
1 [1998, 32323.232] [1998, 32323.232]
[2 rows x 2 columns]
apply 给出错误结果
In [19]:
print DF.apply(operator.itemgetter(-1), axis=1)
Val1 Val2
0 2013 37722.322
1 1998 32323.232
[2 rows x 2 columns]
但是applymap 给出了正确的结果!
In [20]:
print DF.applymap(operator.itemgetter(-1))
Val1 Val2
0 37722.322 37722.322
1 32323.232 32323.232
[2 rows x 2 columns]
为什么会这样?
【问题讨论】:
-
apply 被传递了一整行,这是一系列 2 个元素的列表;最后一个列表被返回并强制为一个系列。嵌入列表作为元素通常不是一个好主意。
-
我同意,这不是在现实生活中存储数据的好方法。非常有趣的是,第一个元素被分配给
Val1。现在我明白了,谢谢!