python - 在 Pandas 数据框中一次更改一行
问题描述
我正在尝试编写一个 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
ETC...
我正在尝试在每次迭代时重置a
and值,但它没有按我期望的方式工作。b
dummy = df
但我希望它产生的是:
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
ETC...
任何帮助将不胜感激!
解决方案
您可能希望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
推荐阅读
- r - 如何删除字符串中逗号之前的所有内容?
- sql - 如何连接两个表并获取数据
- python - for 循环在运行后将值重置为 10
- javascript - 在 React Native 中使用文本转语音
- swift - iOS 14 小部件意图
- angular - 如何从 json 文件中填充下拉列表?
- sql - 边界条件问题中的 DATEDIFF 函数
- python - 如何在 tff.simulation.FilePerUserClientData 中编写正确的 dataset_fn?
- gulp - 任务从未定义:未定义
- azure-ad-b2c - How do I create a user in code, add it Azure AD B2C, then log in as that user using Azure AD B2C OAuth (MSAL)