从pandas数据框的列中过滤数值

时间:2019-03-07 19:46:09

标签: python pandas

我有一个如下所示的数据框。我试图仅从列表中所有列中提取数字值,无论它位于任何字符的右侧,左侧还是中间。如果列值没有数字值,则输入0而不是Nan

df = pd.DataFrame({
    'A': ['1', 3, "1", "cad -2", 3, 4.876, np.nan], 
    'B': ['116', 'CAD -2.6399', 'CAD -3', '$-', '$5%', 'A', '-1.2 2']
})
df

我尝试了下面的代码,但是它为变量“ B”的第4行给出了NAN

l = ["A", "B"]
for columns in l:
    if df[columns].dtype == 'object':
        df[columns] = df[columns].astype('str').str.extract("([-+]?\d*\.\d+|[-+]?\d*\\d+)").astype(float)
df

我希望我的输出如下所示:

A      B
1     116 
3     -2.6399 
1     -3 
-2    0 
3     5 
4.876 0
NaN   -1.2

1 个答案:

答案 0 :(得分:0)

那这样的事情呢?

mask_nulls_data = df.isnull()

for column in df.columns:
    if df[column].dtype == 'object':
        df[column] = df[column].astype('str').str.extract("([-+]?\d*\.\d+|[-+]?\d*\\d+)").astype(float)

#Only put zeros where extract method filled by NaN 
mask_nulls_string = df.isnull() & ~mask_nulls_data
df[mask_nulls_string] = 0