我有一个如下数据框:
A B C
4.43 NaN 1.11
3.70 0.48 0.79
2.78 -0.29 1.26
1.78 2.90 1.13
40.70 -0.03 0.55
51.75 0.29 1.45
3.65 1.74 0.37
2.93 1.56 1.64
3.43 NaN NaN
2.93 NaN NaN
10.37 NaN NaN
现在,如果列A> 7,则要删除列B和C,如下所示:
A B C
4.43 NaN 1.11
3.70 0.48 0.79
2.78 -0.29 1.26
1.78 2.90 1.13
40.70 NaN NaN
51.75 NaN NaN
3.65 1.74 0.37
2.93 1.56 1.64
3.43 NaN NaN
2.93 NaN NaN
10.37 NaN NaN
我该如何实现?
答案 0 :(得分:5)
使用默认值NaN
的{{3}}替换为掩码:
df[['B','C']] = df[['B','C']].mask(df.A > 7)
或将np.nan
指定为df.loc[df.A > 7, ['B','C']] = np.nan
:
print (df)
A B C
0 4.43 NaN 1.11
1 3.70 0.48 0.79
2 2.78 -0.29 1.26
3 1.78 2.90 1.13
4 40.70 NaN NaN
5 51.75 NaN NaN
6 3.65 1.74 0.37
7 2.93 1.56 1.64
8 3.43 NaN NaN
9 2.93 NaN NaN
10 10.37 NaN NaN
int main() {
long int id;
float grade,age;
char name[40],city[40],country[40],line[100]="388891477\tItzel\tGardner\t21\t6\tIran\tTehran";
int read_items = sscanf(line,"%ld %*[\t] %[a-zA-Z -] %*[\t] %f %*[\t] %f %*[\t] %[a-zA-Z -] %*[\t] %[a-zA-Z -]",
&id,name,&age,&grade,country,city);
printf("readed line is: %ld %s %f %f %s %s. sscanf() read %d items\n",id,name,grade,age,country,city,read_items);
}
答案 1 :(得分:3)
另一个可能的答案:
df[['B', 'C']] = df[['B', 'C']].loc[df['A'] <= 7]
print(df)
A B C
0 4.43 NaN 1.11
1 3.70 0.48 0.79
2 2.78 -0.29 1.26
3 1.78 2.90 1.13
4 40.70 NaN NaN
5 51.75 NaN NaN
6 3.65 1.74 0.37
7 2.93 1.56 1.64
8 3.43 NaN NaN
9 2.93 NaN NaN
10 10.37 NaN NaN