Python 比较Dataframe中类型值不一致的列
数据帧df将如下所示:Python 比较Dataframe中类型值不一致的列,python,pandas,dataframe,Python,Pandas,Dataframe,数据帧df将如下所示: import pandas as pd df = pd.DataFrame({'RMDS': ['10.686000','NYSE_XNAS','0.472590','qrtr'], 'Mstar': ['10.690000', 'NYSE_XNAS', '0.473590','mnthly']}) 我想比较“RMDS”和“Mstar”的值,数据帧的类型是“object”,这是一个巨大的数据帧,我需要比较四舍五入的值 掩码=np.环绕(pd.到数值(df.Mstar)
import pandas as pd
df = pd.DataFrame({'RMDS': ['10.686000','NYSE_XNAS','0.472590','qrtr'], 'Mstar': ['10.690000', 'NYSE_XNAS', '0.473590','mnthly']})
我想比较“RMDS”和“Mstar”的值,数据帧的类型是“object”,这是一个巨大的数据帧,我需要比较四舍五入的值
掩码=np.环绕(pd.到数值(df.Mstar),2)!=np.around(pd.to_numeric(df.RMDS),2)
df_差=df[遮罩]
由于列中的值不一致,所以每当字符串值像'qrtr'一样出现时,上面的逻辑就失败了,因为我正在使用pd.to_numeric,但我仍然想比较'RMDS'中的'qrtr'和'Mstar'中的'mnthly'
有什么方法可以处理这种情况。使用
pd。要转换数值,然后.fillna
将所有未转换的内容取回
Mstar RMDS
0 10.690000 10.686000
1 NYSE_XNAS NYSE_XNAS
2 0.473590 0.472590
3 mnthly qrtr
或者,定义自己的函数并使用.applymap
import pandas as pd
import numpy as np
df = np.round(df.apply(pd.to_numeric, errors='coerce'),2).fillna(df)
# RMDS Mstar
#0 10.69 10.69
#1 NYSE_XNAS NYSE_XNAS
#2 0.47 0.47
#3 qrtr mnthly
df.RMDS == df.Mstar
#0 True
#1 True
#2 True
#3 False
#dtype: bool
def my_round(x):
try:
return np.round(float(x),2)
except ValueError:
return x
df = df.applymap(my_round)