如果 Pandas Dataframe 中的某行的 ID 值不是特定值,是否将其替换为 NaN?
Replace a row in Pandas Dataframe with NaN if an ID value in that row isn't a certain value?
我为这个可能令人困惑的标题道歉,但我会尽力解释我的情况。
假设我有一个假设的 Dataframe df
,它有一个 id
列并且排列如下...
time id x y
1.0 0 5 9
2.0 1 6 8
3.0 2 7 7
4.0 1 8 6
现在假设我只想要 df[id] = 1
行中的数据,但我没有删除其他行,而是像这样用 NaN
填充它...
time id x y
1.0 0 NaN NaN
2.0 1 6 8
3.0 2 NaN NaN
4.0 1 8 6
请注意,我特别想保留 time
和id
列,只需更改x
和[=20 的值=] 到 NaN
对于没有 id
列设置为 1
的任何行
我的第一次尝试是使用 DataFrame.groupby()
,但这会导致没有特定 id
值的任何行被完全删除,这是我不希望的。我的第一直觉是逐行进入 df
,检查 id 列,如果 id != 1
,则手动将值更改为 NaN
,但这似乎非常麻烦 [=43] =] 这样做的方式。
有什么想法吗?
提前致谢!
您可以使用带有布尔掩码的简单选择:
df.loc[df['id'].ne(1), ['x', 'y']] = float('nan')
输出:
time id x y
0 1.0 0 NaN NaN
1 2.0 1 6.0 8.0
2 3.0 2 NaN NaN
3 4.0 1 8.0 6.0
from numpy import NAN
df.loc[df['id']!=1 , ['x','y']] = NAN
我为这个可能令人困惑的标题道歉,但我会尽力解释我的情况。
假设我有一个假设的 Dataframe df
,它有一个 id
列并且排列如下...
time id x y
1.0 0 5 9
2.0 1 6 8
3.0 2 7 7
4.0 1 8 6
现在假设我只想要 df[id] = 1
行中的数据,但我没有删除其他行,而是像这样用 NaN
填充它...
time id x y
1.0 0 NaN NaN
2.0 1 6 8
3.0 2 NaN NaN
4.0 1 8 6
请注意,我特别想保留 time
和id
列,只需更改x
和[=20 的值=] 到 NaN
对于没有 id
列设置为 1
我的第一次尝试是使用 DataFrame.groupby()
,但这会导致没有特定 id
值的任何行被完全删除,这是我不希望的。我的第一直觉是逐行进入 df
,检查 id 列,如果 id != 1
,则手动将值更改为 NaN
,但这似乎非常麻烦 [=43] =] 这样做的方式。
有什么想法吗? 提前致谢!
您可以使用带有布尔掩码的简单选择:
df.loc[df['id'].ne(1), ['x', 'y']] = float('nan')
输出:
time id x y
0 1.0 0 NaN NaN
1 2.0 1 6.0 8.0
2 3.0 2 NaN NaN
3 4.0 1 8.0 6.0
from numpy import NAN
df.loc[df['id']!=1 , ['x','y']] = NAN