当列中的值为字符串时,删除列中的行

时间:2016-08-03 11:05:03

标签: python python-3.x pandas

我有以下数据框:

           MATERIAL KW_WERT NETTO_EURO                 TA  
0            B60ETS    0.15       18.9                SDH  
1            B60ETS   0.145      18.27                SDH  
2            B60ETS   0.145      18.27                SDH  
3            B60ETS    0.15       18.9                SDH  
4            B60ETS    0.15       18.9                SDH  
5            B60ETS   0.145      18.27                SDH  
6            B60ETS    0.15       18.9                SDH  
7            B60ETS   3.011     252.92         DSLAM/MSAN  
8            B60ETS   3.412     429.91         DSLAM/MSAN  
9            B60ETS     0.9      113.4         DSLAM/MSAN  
10           B60ETS   0.281       23.6         DSLAM/MSAN  
11           B60ETS   0.078       9.83         DSLAM/MSAN  
12           B60ETS   0.107      13.48         DSLAM/MSAN  
13           B60ETS   0.192         KW         DSLAM/MSAN  
14           B60ETS   0.007         KW               PSTN  
15          G230ETS     0.3      46.05          SONSTIGES  

如何在列NETTO_EURO中过滤数据类型(字符串)并删除它?

关键是我获得的基本数据包含一些错误,我不能用它中的字符串数据来总结列。现在是第一个删除行的解决方案。之后我会尝试修复它。

感谢您的帮助。

达米安

1 个答案:

答案 0 :(得分:1)

您可以将to_numericnotnullboolean indexing一起使用掩码:

print (pd.to_numeric(df.NETTO_EURO, errors='coerce').notnull())
0      True
1      True
2      True
3      True
4      True
5      True
6      True
7      True
8      True
9      True
10     True
11     True
12     True
13    False
14    False
15     True
Name: NETTO_EURO, dtype: bool

print (df[pd.to_numeric(df.NETTO_EURO, errors='coerce').notnull()])
   MATERIAL  KW_WERT NETTO_EURO          TA
0    B60ETS    0.150       18.9         SDH
1    B60ETS    0.145      18.27         SDH
2    B60ETS    0.145      18.27         SDH
3    B60ETS    0.150       18.9         SDH
4    B60ETS    0.150       18.9         SDH
5    B60ETS    0.145      18.27         SDH
6    B60ETS    0.150       18.9         SDH
7    B60ETS    3.011     252.92  DSLAM/MSAN
8    B60ETS    3.412     429.91  DSLAM/MSAN
9    B60ETS    0.900      113.4  DSLAM/MSAN
10   B60ETS    0.281       23.6  DSLAM/MSAN
11   B60ETS    0.078       9.83  DSLAM/MSAN
12   B60ETS    0.107      13.48  DSLAM/MSAN
15  G230ETS    0.300      46.05   SONSTIGES

如果旧版本的pandas使用convert_objects

print (df[df["NETTO_EURO"].convert_objects(convert_numeric=True).notnull()])
   MATERIAL  KW_WERT NETTO_EURO          TA
0    B60ETS    0.150       18.9         SDH
1    B60ETS    0.145      18.27         SDH
2    B60ETS    0.145      18.27         SDH
3    B60ETS    0.150       18.9         SDH
4    B60ETS    0.150       18.9         SDH
5    B60ETS    0.145      18.27         SDH
6    B60ETS    0.150       18.9         SDH
7    B60ETS    3.011     252.92  DSLAM/MSAN
8    B60ETS    3.412     429.91  DSLAM/MSAN
9    B60ETS    0.900      113.4  DSLAM/MSAN
10   B60ETS    0.281       23.6  DSLAM/MSAN
11   B60ETS    0.078       9.83  DSLAM/MSAN
12   B60ETS    0.107      13.48  DSLAM/MSAN
15  G230ETS    0.300      46.05   SONSTIGES