大约一年前,我从R转到python,但有时我仍然觉得熊猫难以理解。这是一个示例:
import pandas as pd
a = pd.DataFrame(dict(x = [1,2,3], y = [4,5,6], z = [7,8,9]))
a
Out[34]:
x y z
0 1 4 7
1 2 5 8
2 3 6 9
我要替换这部分:
a.loc[a.x>1, "y":]
Out[35]:
y z
1 5 8
2 6 9
与此部分:
a.loc[a.x<3, 'x':"y"]
Out[36]:
x y
0 1 4
1 2 5
所以我试图做到这一点:
a.loc[a.x>1, "y":] = a.loc[a.x<3, 'x':"y"]
但是我明白了:
a
Out[38]:
x y z
0 1.0 4.0 7.0
1 2.0 5.0 NaN
2 3.0 NaN NaN
该死的。我猜这与索引编制有关系吗?
当我将要转换的部分转换为numpy数组时,它起作用:
a.loc[a.x>1, "y":] = np.array(a.loc[a.x<3, 'x':"y"])
a
Out[44]:
x y z
0 1 4 7
1 2 1 4
2 3 2 5
大概是因为这会丢弃使我绊倒的所有元数据。
我有两个问题:
这里的熊猫行为背后的原理是什么?对我来说似乎有点晦涩难懂,但是我的期望是由我在R(以及之前的Matlab)的背景决定的,很可能有充分的理由。
更具体地说:做我正在尝试的潘多尼克方式是什么?