python - pandas:使用 (row, col) 索引设置值

标签 python pandas

pandas 提供通过行和列索引列表查找的能力,

In [49]: index = ['a', 'b', 'c', 'd']

In [50]: columns = ['one', 'two', 'three', 'four']

In [51]: M = pandas.DataFrame(np.random.randn(4,4), index=index, columns=columns)

In [52]: M
Out[52]: 
        one       two     three      four
a -0.785841 -0.538572  0.376594  1.316647
b  0.530288 -0.975547  1.063946 -1.049940
c -0.794447 -0.886721  1.794326 -0.714834
d -0.158371  0.069357 -1.003039 -0.807431

In [53]: M.lookup(index, columns) # diagonal entries
Out[53]: array([-0.78584142, -0.97554698,  1.79432641, -0.8074308 ])

我想使用同样的索引方法来设置 M 的元素。我该怎么做?

最佳答案

自从写下这个答案以来已经过去了很多年,所以我虽然可能会做出一点贡献。随着 pandas 的重构,尝试在一个位置设置一个值

M.iloc[index][col]

可能会警告您尝试在切片中设置值。

SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame

See the the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy

在 0.21 之后的 pandas 版本中,正确的“pythonic”方式现在是 pandas.DataFrame.at operator

看起来像这样:

M.at[index,col] = new_value

旧版本的答案: 在旧版本中更“pythonic”的方法是使用 pandas.DataFrame.set_value操作说明。请注意,此指令返回结果 DataFrame。

M.set_value(index,column,new_value)

我只是想在弄清楚 .iloc 或 .ix 方法可能产生的警告的来源之后将其发布在这里。

set_value 方法也适用于多索引数据帧,方法是将索引的多个级别作为元组放入(例如,用 (col,subcol) 替换列)

关于python - pandas:使用 (row, col) 索引设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12100497/

相关文章:

python - 映射到 pandas 中的子字符串键

python - 通过python编译PySide资源

python - pygame 的随机线生成

python - 在 Python 中,需要一种有效的方法将 kdtree 索引映射到值

python - 在 Python 中获取两个列表组合的最佳方法是什么 -

python - 根据另一个数据帧值对 pandas 值进行排序

python - 由函数创建的多个列表输出,我如何将其放入数据帧?

python - 在 Django admin 中将模型字段显示为只读

python - 找到 3 个 DataFrame 之间的共同值?

python - Selenium python 卡在这条线上