我查看了现有的索引线程,没有一个线程能解决当前的用例。
我想根据DataFrame
中的特定值在其中的位置来改变它们,即,我想让第二列从第一行到第四行的值为NaN
,第三列、第一行和第二行的值为NaN
,假设我们有以下“DataFrame”:
df = pd.DataFrame(np.random.standard_normal((7,3)))
print(df)
0 1 2
0 -1.102888 1.293658 -2.290175
1 -1.826924 -0.661667 -1.067578
2 1.015479 0.058240 -0.228613
3 -0.760368 0.256324 -0.259946
4 0.496348 0.437496 0.646149
5 0.717212 0.481687 -2.640917
6 -0.141584 -1.997986 1.226350
我想用最少的代码改变df
如下:
0 1 2
0 -1.102888 NaN NaN
1 -1.826924 NaN NaN
2 1.015479 NaN -0.228613
3 -0.760368 NaN -0.259946
4 0.496348 0.437496 0.646149
5 0.717212 0.481687 -2.640917
6 -0.141584 -1.997986 1.226350
我尝试使用布尔索引.loc
,但导致错误:
df.loc[(:2,1:) & (2:4,1)] = np.nan
# exception message:
df.loc[(:2,1:) & (2:4,1)] = np.nan
^
SyntaxError: invalid syntax
我也考虑过将DataFrame
对象转换为numpy narray
对象,但我不知道在这种情况下如何使用布尔值。
1条答案
按热度按时间5anewei61#
一种方法是定义要求并明确分配: