Pandas DataFrame: вычитать столбцы с типом строки - PullRequest
2 голосов
/ 16 апреля 2019

Как вычесть два столбца, которые содержат значения типа string? Никакие значения не обозначены как «---» и должны приводить к «---» в результате. Результат также должен иметь значение типа string.

Источник

df1 = pd.DataFrame({'x': ['a', 'b', 'c'], 'y': ['5', '---', '7']})

    x   y
0   'a' '5'
1   'b' '---'
2   'c' '7'

df2 = pd.DataFrame({'x': ['a', 'b', 'c'], 'y': ['1', '2', '---']})

    x    y
0   'a'  '1'
1   'b'  '2'
2   'c'  '---'

Target

df3 = df1 - df2

    x   y
0   'a' '4'
1   'b' '---'
2   'c' '---'

Ответы [ 2 ]

1 голос
/ 16 апреля 2019

Вы можете использовать pd.to_numeric, чтобы заменить все '---' на NaNs, а также привести все значения к floats:

df1['y'] = pd.to_numeric(df1['y'], errors='coerce')
df2['y'] = pd.to_numeric(df2['y'], errors='coerce')

Просто вычтите оба столбца и сохраните результат в df1, например:

df1['y'] = (df1['y'] - df2['y']).replace(np.nan,'---')

   x    y
0  a    4
1  b  ---
2  c  ---
1 голос
/ 16 апреля 2019

Попробуйте с:

df1.set_index('x').apply(lambda x: pd.to_numeric(x,errors='coerce')).sub(
      df2.set_index('x').apply(lambda x: pd.to_numeric(x,errors='coerce'))).fillna('--')\
                                                                .reset_index()

   x   y
0  a   4
1  b  --
2  c  --
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...