недопустимый литерал для int () с базой 10: 'EC180'

0

Все, что я пробовал, было:

    df['buyer_zip']=df['buyer_zip'].replace('-', 0)
    df['buyer_zip']=df['buyer_zip'].replace('', 0)
    df['buyer_zip']=df['buyer_zip'].str[:5]
    df["buyer_zip"].fillna( method ='ffill', inplace = True)
    df["buyer_zip"].apply(int)

У меня есть два столбца в фрейме данных pandas, называемые Buyer_zip и Item_zip, которые являются почтовыми индексами покупателя и товаров соответственно. Эти почтовые индексы имеют 4 формата. Один - это 5-значный почтовый индекс (например, 12345), второй - 5 + 4-значный почтовый индекс (12345-1234), один - 9-значный почтовый индекс (123456789), а последний - «EC180». Итак, последний формат - буквенно-цифровой. Всего 15 миллионов записей. Меня поразил момент, когда мне нужно преобразовать все эти буквенно-цифровые значения в числовые. При попытке сделать то же самое я обнаружил ошибку: недопустимый литерал для int () с базой 10: 'EC180'. Может ли кто-нибудь помочь мне найти все слова в моем столбце данных и заменить их на 00000. Ценю любую помощь. Но ни один из них не дал ответа на то, как найти слова в этом столбце и заменить их числами

Образец данных:

buyer_zip 
97219 
11415-3528 
EC180
907031234

Ожидаемый результат

     buyer_zip
0      97219
1  114153528
2          0
3  907031234
Новый участник
Vasudha Pasumarthi is a new contributor to this site. Take care in asking for clarification, commenting, and answering. Check out our Code of Conduct.
15
  • 1
    Включите образец фрейма данных и ожидаемый результат. 1 час назад
  • Рекордов много - 15 млн. Так что не могу ничего прикрепить 1 час назад
  • Пожалуйста, вытащите свой вопрос из кода. Из-за этого невозможно понять, о чем вы спрашиваете. 1 час назад
  • 15 миллионов - это совсем немного для публикации. Но у вас есть 4 типа, как насчет df с 1 столбцом и 4 строками. Может быть, еще несколько строк, чтобы показать разные примеры буквенного алфавита, с которым у вас возникла проблема. 1 час назад
  • 1
    @tdelaney, поймите, пожалуйста, я не особо строгий. OP - новичок, и я уже поставил ему базовую линию. Практика задавать хороший вопрос действительно помогает другим. Кроме того, я не думаю, что обновление ожидаемого результата действительно будет тем, что хочет OP, он сказал, что строка "00000"по умолчанию ... 1 час назад
0

У Pandas есть несколько различных методов «замены». На a DataFrameили a Seriesзамена предназначена для сопоставления и замены целых значений. Например, df['buyer_zip'].replace('-', 0)ищет значение столбца, которое представляет собой буквально единственный символ «-», и заменяет его целым числом 0. Это не то, что вам нужно. Серия также имеет .strатрибут , который держит функции для строк, а ее replace ближе к тому , что вы хотите.

Но это то, что вам нужно, когда у вас есть строка, которая начинается с нецифровой буквы. Вы хотите, чтобы это было полностью заменено на "00000".

Наконец, astypeэто более быстрый способ преобразовать столбец в int.

import pandas as pd

df = pd.DataFrame({"buyer_zip":["12345", "123451234", "123456789", "EC180"]})

df["buyer_zip"] = df["buyer_zip"].str.replace("-", "")
df["buyer_zip"] = df["buyer_zip"].replace(r"[^\d].*$", "00000", regex=True)
df["buyer_zip"] = df["buyer_zip"].astype(int)

Операции можно объединить в цепочку. Примените вторую операцию к результату первой и т. Д., И вы можете сжать преобразование

df["buyer_zip"] = df["buyer_zip"].str.replace("-", "").replace(r"[^\d].*$", "00000", regex=True).astype(int)