Сравните столбцы в Dataframe с несовместимыми значениями типа - PullRequest
0 голосов
/ 19 ноября 2018
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 [маска]

, так как значения в столбцах не согласованы, поэтому всякий раз, когда строковые значения приходят как 'qrtr', вышеуказанная логика не работает, так как я использую pd.to_numeric, но все же я хотел сравнить 'qrtr' из 'RMDS' в 'mnthly' в «Мстар»

Есть ли способ, которым я мог бы справиться с такой ситуацией.

1 Ответ

0 голосов
/ 19 ноября 2018

Используйте 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...