在熊猫数据框中的特定条件下删除值

时间:2019-11-12 14:10:44

标签: python pandas dataframe

我有一个如下数据框:

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

我该如何实现?

2 个答案:

答案 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