Мне нужно объединить два кадра данных pandas, используя столбцы, которые содержат числовые значения.
Например, два кадра данных могут быть похожими на следующие:
кадр данных "a"
a1 b1
0 "x" 13560
1 "y" 193309
2 "z" 38090
3 "k" 37212
фрейм данных "b"
a2 b2
0 "x" 13,56
1 "y" 193309
2 "z" 38,09
3 "k" 37212
Что мне нужно сделать, это слияние a с b в столбце b1/b2.
Проблема в том, что, как вы можете видеть, некоторые значения фрейма данных b 'немного отличаются друг от друга. Прежде всего, значения b 'не являются целыми числами, а строками, и, кроме того, значения, заканчивающиеся на 0, "округлены" (13560 → 13,56).
То, что я пытался сделать, заменяет запятую, а затем бросает их в int, но это не работает; более подробно эта процедура не добавляет недостающий ноль.
Это код, который я пробовал:
b['b2'] = b['b2'].str.replace(",", "")
b['b2'] = b['b2'].astype(np.int64) # np is numpy
Есть ли какая-нибудь процедура, которую я могу использовать для устранения этой проблемы?
Мне кажется, нужно создать логическую маску для указания, какие значения должны быть краткими:
#or add parameter thousands=',' to read_csv like suggest @Inder
b['b2'] = b['b2'].str.replace(",", "", regex=True).astype(np.int64)
mask = b['b2'] < 10000
b['b2'] = np.where(mask, b['b2'] * 10, b['b2'])
print (b)
a2 b2
0 x 13560
1 y 193309
2 z 38090
3 k 37212
Исправление столбца сначала с помощью функции apply
и лямбда:
b.b2 = b.b2.apply(lambda x: int(x.replace(',','')) * 10 if ',' in x else int(x))