python - 在 Pandas 数据框中一次更改一行

标签 python pandas for-loop

我正在尝试编写一个 for 循环,它将迭代数据帧中索引的子集,每个循环返回一个仅更改一行的数据帧。

这里有一些虚拟代码来演示我的意思:

# Two columns of random numbers
df = pd.DataFrame(np.random.randn(10,2),columns=list('ab'))
# The index values where row 'a' > 0
indices = df.loc[df['a'] > 0].index

这就是我尝试做的事情:

for index in indices:
    dummy = df
    dummy.loc[index,'a'] = 'Hello'
    dummy.loc[index,'b'] = 'World'
    print(dummy)

返回结果:

         a         b
0     -1.30278  0.592978
1        Hello     World
2    0.0113196  0.441662
3      1.59222 -0.152032
4    -0.293761 -0.519106
5    -0.402177   1.27412
6      1.24692 -0.203043
7     0.232682  -1.29515
8     -1.03781   0.89598
9  0.000474012  0.572173
         a         b
0     -1.30278  0.592978
1        Hello     World
2        Hello     World
3      1.59222 -0.152032
4    -0.293761 -0.519106
5    -0.402177   1.27412
6      1.24692 -0.203043
7     0.232682  -1.29515
8     -1.03781   0.89598
9  0.000474012  0.572173
         a         b
0     -1.30278  0.592978
1        Hello     World
2        Hello     World
3        Hello     World
4    -0.293761 -0.519106
5    -0.402177   1.27412
6      1.24692 -0.203043
7     0.232682  -1.29515
8     -1.03781   0.89598
9  0.000474012  0.572173

等等...

我试图在 dummy = df 行的每次迭代中重置 ab 值,但它不起作用正如我所期望的那样。

但我希望它产生的是:

         a         b
0     -1.30278  0.592978
1        Hello     World
2    0.0113196  0.441662
3      1.59222 -0.152032
4    -0.293761 -0.519106
5    -0.402177   1.27412
6      1.24692 -0.203043
7     0.232682  -1.29515
8     -1.03781   0.89598
9  0.000474012  0.572173
         a         b
0     -1.30278  0.592978
1      0.74578  0.482945
2        Hello     World
3      1.59222 -0.152032
4    -0.293761 -0.519106
5    -0.402177   1.27412
6      1.24692 -0.203043
7     0.232682  -1.29515
8     -1.03781   0.89598
9  0.000474012  0.572173
         a         b
0     -1.30278  0.592978
1      0.74578  0.482945
2      0.01131  0.441662
3        Hello     World
4    -0.293761 -0.519106
5    -0.402177   1.27412
6      1.24692 -0.203043
7     0.232682  -1.29515
8     -1.03781   0.89598
9  0.000474012  0.572173

等等...

任何帮助将不胜感激!

最佳答案

您可能期望 dummy = df 制作 df 的副本。 dummy 实际上指向与 df 相同的底层对象,因此对 dummy 所做的任何更改都会对 df 进行,如下所示出色地。您可以通过复制 df 来解决此问题,但更简单、更有效的方法是在打印之前保存原始值,然后在打印后恢复它们。

for index in indices: 
    orig_values = df.loc[index, ['a', 'b']] 
    df.loc[index, ['a', 'b']] = ['Hello', 'World'] 
    print(df) 
    df.loc[index, ['a', 'b']] = orig_values            

关于python - 在 Pandas 数据框中一次更改一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52878004/

相关文章:

python - 如何过滤掉警告信息

javascript - 循环不收集数组中的所有值

python - MIDI 刻度是固定值还是取决于文件的 BPM?

python - 期望一个字符缓冲区对象

python - NumPy - 迭代二维列表并打印(行,列)索引

Python 按一列分组并计算另一列的百分比

python - Pandas 等于神秘行为

Java HEX 到 ASCII 的转换、for 循环和所需的其他信息

C for 整数循环

python - 这段代码 Python 3.3 有什么问题