使用Pandas Datafram保存python for循环中更新的值

2024-05-14 00:06:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python和Pandas的新手,我尝试用一个特定的值替换数组中的所有空值。在

每次我运行这个时,更新的值不会持续。在

我已经看到Pandas在迭代行时不保存更改……那么我如何保存更改呢?在

这是我的密码

animal_kinds = set(df.AnimalKind) # this gives categories used below in the "ak" like dog, cat, bird
new_color_dog = 'polka dots'
new_color_cat = 'plaid'
new_color_bird = 'stripes'

for ak in animal_kinds:
    ak_colors = ak['colors']


    ak_with_no_color = animals[(df["Kind"] == ak ) & (df["Color"] == "" ) ] 


    result_count = len(ak_with_no_color)
    if result_count:

        ak_with_no_color.at["Color"] = new_color_ak #sets new color based on kind of animal (ak) 
        print(str(ak) 'color is changed to ' + str(new_color_ak))

Tags: noinpandasdfnewwithcatcolor
1条回答
网友
1楼 · 发布于 2024-05-14 00:06:32

避免链接索引

这种操作称为链式索引,它是explicitly discouraged in the docs

df[(df['kind'] == 'dog') & (df['colour'] == '')].at['colour'] = 'black'

相反,计算然后使用布尔掩码:

^{pr2}$

使用字典来处理变量数

这种操作在Python中执行不工作:

^{pr3}$

请使用字典:

^{pr4}$

然后,您可以迭代字典的键值对:

for animal, new_colour in new_colours.items():
    mask = (df['kind'] == animal) & (df['colour'] == '')
    df.loc[mask, 'colour'] = new_colour

当^{{cd1>}返回一系列^{{cd2>}值时,不需要测试/特殊情况实例。

相关问题 更多 >