从pandas dataframe列中筛选数值

问题描述 投票:2回答:1

我有一个如下所示的数据框。我试图从列表中的所有列中仅提取数值,无论它是在任何字符的右侧,左侧还是中间。如果列值没有数值,则输入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
python pandas
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.