根据单元格和列中的条件更改单元格值

2024-04-28 09:10:23 发布

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

我有一个有很多“坏”单元格的数据帧。比方说,它们的值都是-99.99,我想删除它们(将它们设置为NaN)

这很好:

df[df == -99.99] = None

但实际上,我只想在同一行中的另一个单元格是market为1时删除所有这些单元格(例如,在“Error”列中)

我想删除所有-99.99单元格,但前提是df[“Error”]==1

我认为最直接的解决方案是

df[(df == -99.99) & (df["Error"] == 1)] = None

但它给了我一个错误:

ValueError: cannot reindex from a duplicate axis

我在互联网上尝试了所有给定的解决方案,但都无法实现(

因为我的数据帧很大,所以我不想迭代它(这当然可以,但需要很多时间)

有什么提示吗


Tags: 数据fromnonedf错误errornan解决方案
2条回答

尝试在传递numpy值时使用广播:

# sample data, special value is -99
df = pd.DataFrame([[-99,-99,1], [2,-99,2], 
                   [1,1,1], [-99,0, 1]], 
                  columns=['a','b','Errors'])

# note the double square brackets
df[(df==-99) & (df[['Errors']]==1).values] = np.nan

输出:

     a     b  Errors
0  NaN   NaN       1
1  2.0 -99.0       2
2  1.0   1.0       1
3  NaN   0.0       1

至少,这是可行的(但使用列迭代):

for i in df.columns:
    df.loc[df[i].isin([-99.99]) & df["Error"].isin([1]), i] = None

相关问题 更多 >