Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 比较Dataframe中类型值不一致的列_Python_Pandas_Dataframe - Fatal编程技术网

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

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)

数据帧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),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)