比较Dataframe中类型值不一致的列


import pandas as pd
df = pd.DataFrame({'RMDS': ['10.686000','NYSE_XNAS','0.472590','qrtr'], 'Mstar': ['10.690000', 'NYSE_XNAS', '0.473590','mnthly']})

数据帧df将如下所示:

Mstar       RMDS
0   10.690000   10.686000
1   NYSE_XNAS   NYSE_XNAS
2   0.473590    0.472590
3   mnthly      qrtr

我想比较"RMDS"one_answers"Mstar"的值,数据帧的类型是"object",这是一个巨大的数据帧,我需要比较四舍五入的值

mask=np.around(pd.to_numeric(df.Mstar(,2(!=np.around(pd.to_numeric(df.RMDS(,2(

df_Difference=df[mask]

由于列中的值不一致,因此每当字符串值像"qrtr"一样出现时,上述逻辑都会失败,因为我使用的是pd.to_numeric,但我仍然想比较"RMDS"中的"qrtr"one_answers"Mstar"中的"mnthly">

我有什么办法可以处理这种情况吗。

使用pd.to_numeric来转换您可以转换的内容,然后使用.fillna来取回未转换的所有内容。

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

或者,定义自己的函数并使用.applymap

def my_round(x):
try:
return np.round(float(x),2)
except ValueError:
return x
df = df.applymap(my_round)

最新更新