Конвертировать в целочисленные числовые строки

1

Мне нужно объединить два кадра данных 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

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

  • 0
    чтение данных из csv ???
  • 0
    да, я читаю два разных файла CSV
Показать ещё 2 комментария
Теги:
pandas
dataframe
python-3.x

2 ответа

2
Лучший ответ

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

#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
0

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

b.b2 = b.b2.apply(lambda x: int(x.replace(',','')) * 10 if ',' in x else int(x))

Ещё вопросы

Сообщество Overcoder
Наверх
Меню