Конвертировать в целочисленные числовые строки - PullRequest
0 голосов
/ 27 августа 2018

Мне нужно объединить два фрейма данных панд, используя столбец, который содержит числовые значения.
Например, два фрейма данных могут быть похожи на следующие:

фрейм данных "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

Есть ли какая-либо процедура, которую я могу использовать, чтобы решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Сначала исправляем столбец с помощью apply и лямбда-функции:

b.b2 = b.b2.apply(lambda x: int(x.replace(',','')) * 10 if ',' in x else int(x))
0 голосов
/ 27 августа 2018

Я считаю, что нужно создать логическую маску, чтобы указать, какие значения должны быть кратны:

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