簡體   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