当值以' _h'结束时,用np.nan替换pandas DataFrame值。

时间:2017-11-02 21:29:52

标签: python pandas

以下是我一直在使用np.NaN替换某些值的代码。我的问题是如何更换' 47614750_h'在索引111处具有np.NaN。我可以直接使用drop_list执行此操作,但是,我需要使用以' _h'结尾的不同值来迭代它。在许多文件,并希望自动执行此操作。 我已经尝试了一些关于正则表达式的搜索,因为它似乎要走了,但找不到我需要的东西。

drop_list = ['dash_code', 'SONIC WELD']

df_clean.replace(drop_list, np.NaN).tail(10)

    DASH_CODE     Name                          Quantity
107 1011567      .156 MALE BULLET TERM INSUL    1.0
108 102066901     .032 X .187 FEMALE Q.D. TERM. 1.0
109 105137901     TERM,RING,10-12AWG,INSULATED  1.0
110 101919701     1/4 RING TERM INSUL           2.0
111 47614750001_h HARNESS, MAIN, AC, LIO        1.0
112 NaN           NaN                           19.0
113 7685          5/16 RING TERM INSUL.         1.0
114 102521601     CLIP,HARNESS                  2.0
115 47614808001   CAP, RESISTOR, TERMINATION    1.0
116 103749801     RECPT, DEUTSCH, DTM04-4P      1.0

2 个答案:

答案 0 :(得分:2)

尝试使用pd.to_numeric将所有行转换为float可能会更快:

In [11]: pd.to_numeric(df.DASH_CODE, errors='coerce')
Out[11]:
0    1.011567e+06
1    1.020669e+08
2    1.051379e+08
3    1.019197e+08
4             NaN
5             NaN
6    7.685000e+03
7    1.025216e+08
8    4.761481e+10
9    1.037498e+08
Name: DASH_CODE, dtype: float64

In [12]: df["DASH_CODE"] = pd.to_numeric(df["DASH_CODE"], errors='coerce')

答案 1 :(得分:1)

您可以将pd.Series.apply用于lambda:

df['DASH_CODE'] = df['DASH_CODE'].apply(lambda x: np.NaN if x.endswith('_h') else x)

来自documentation

  

调用Series的值函数。可以是ufunc(NumPy函数   这适用于整个Series)或仅适用于Python函数   适用于单一值