Python 从数据框的列中筛选数值

Python 从数据框的列中筛选数值,python,pandas,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

我有一个如下所示的数据框。我试图只从列表中的所有列中提取数值,无论是在任何字符的右边、左边还是中间。如果列值没有数值,请输入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

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

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

像这样的东西怎么样:

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

如果数据帧有不同数量的元素,会发生什么?它不应该对其他列做任何事情。例如,如果数据帧看起来像这样``df1=pd.dataframe({'A':['$-','cad-2'],'B':['116','cad-2.6399'],'C':['$-','cad-2']})df2=pd.dataframe({'A':[1,3,4],'B':['116','cad-2.6399',np nan],'C':[1,3,4]})``我只想从B列和C列(而不是一个框架中的所有列)提取数值。如果要从特定列(而不是数据帧中的所有列)提取数值,则此代码不起作用。在这种情况下,当我试图通过在下面的数据帧中循环来从两个数据帧的B列和C列提取数值时,它给出了下面的错误“TypeError:Cannot do In place boolean setting on mixed types with a non-np.nan value”错误。df1=pd.DataFrame({'A':['$-','cad-2'],'B':['116','cad-2.6399'],'C':['$-','cad-2']})df2=pd.DataFrame({'A':[1,3,4],'B':['116','cad-2.6399',np nan],'C':[1,3,4]})这是我的代码:
l2=[df1,df2]l1=[“B”,“C”]对于l2中的文件:对于空列中的文件,如果是空的,则为l1:[S]。][columns],object):files[columns]=files[columns].astype('str').str.extract(([-+]?\d*\.\d++]?\d*\\d+)。astype(float)mask_nulls_string=files.isnull()&~mask_nulls_数据文件[mask_nulls_string]=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