繁体   English   中英

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

[英]Altering one row at a time in a Pandas dataframe

我正在尝试编写一个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

等等...

任何帮助将不胜感激!

您应该在循环中添加.copy()

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

您可能期望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            

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM