gpt4 book ai didi

python - 比较 Dataframe 中具有不一致类型值的列

转载 作者:太空宇宙 更新时间:2023-11-04 04:26:38 26 4
gpt4 key购买 nike

import pandas as pd

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

Dataframe df 看起来像这样:

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

我想比较“RMDS”和“Mstar”的值,数据框类型是“对象”,这是一个巨大的数据框,我需要比较四舍五入的值

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' 和 '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)

关于python - 比较 Dataframe 中具有不一致类型值的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53376805/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com