繁体   English   中英

Pandas.iloc 索引加上 Dataframe 中的 boolean 索引

[英]Pandas .iloc indexing coupled with boolean indexing in a Dataframe

我调查了有关索引的现有线程,没有一个线程解决当前用例。

我想根据其中的DataFrame更改 DataFrame 中的特定值,即,我希望从第一行到第四行的第二列中的值为NaN ,第三列、第一行和第二行中的值为 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

我尝试将 boolean 索引与.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 object 转换为 numpy narray object 但在那种情况下我不知道如何使用 boolean 。

一种方法是定义要求并明确分配:

d = {1:4,2:2}
for col,val in d.items():
    df.iloc[:val,col] = np.nan

print(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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM