我有以下数据框:

           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列中的数据类型(字符串)并将其删除?

关键是我得到的基本数据包含一些错误,并且我不能总结其中包含字符串数据的列。现在是删除行的第一个解决方案。稍后,我将尝试以其他方式修复它。

谢谢您的帮助。

达米安

最佳答案

您可以将mask与to_numeric结合使用,将notnullboolean 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


如果有旧版本的熊猫,请使用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

关于python - 当列中的值是字符串时,删除列中的行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38741814/

10-12 21:20