Pandas - 根据单元格和列中的条件更改单元格值
Pandas - change cell value based on conditions from cell and from column
我有一个包含很多“坏”单元格的 Dataframe。比方说,它们的值都是 -99.99,我想删除它们(将它们设置为 NaN)。
这很好用:
df[df == -99.99] = None
但实际上我只想删除所有这些单元格,前提是同一行中的另一个单元格为 1(例如,在“错误”列中)。
我想删除所有 -99.99 的单元格,但前提是 df["Error"] == 1。
我认为最直接的解决方案是
df[(df == -99.99) & (df["Error"] == 1)] = None
但它给了我错误:
ValueError: cannot reindex from a duplicate axis
我尝试了互联网上所有给定的解决方案,但我无法让它工作! :(
由于我的 Dataframe 很大,我不想对其进行迭代(这当然可以,但会花费很多时间)。
有什么提示吗?
尝试在传递 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
我有一个包含很多“坏”单元格的 Dataframe。比方说,它们的值都是 -99.99,我想删除它们(将它们设置为 NaN)。
这很好用:
df[df == -99.99] = None
但实际上我只想删除所有这些单元格,前提是同一行中的另一个单元格为 1(例如,在“错误”列中)。
我想删除所有 -99.99 的单元格,但前提是 df["Error"] == 1。
我认为最直接的解决方案是
df[(df == -99.99) & (df["Error"] == 1)] = None
但它给了我错误:
ValueError: cannot reindex from a duplicate axis
我尝试了互联网上所有给定的解决方案,但我无法让它工作! :(
由于我的 Dataframe 很大,我不想对其进行迭代(这当然可以,但会花费很多时间)。
有什么提示吗?
尝试在传递 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