Частично преобразовать столбец в кадре данных Python - PullRequest
1 голос
/ 08 марта 2019

У меня есть столбец в кадре данных Python, который выглядит следующим образом:

Product_ID
ABCD
1234
0001234
2345
4567
EFGH

В настоящее время он сохраняется как тип данных объекта. Однако я хочу, чтобы числа были объединены (т. Е. 1234 - это тот же продукт, что и 0001234). Поскольку в столбце также есть текстовые строки, я не могу преобразовать их в целое число

df['Product_ID'] = pd.to_numeric(df['Product_ID'])

ValueError: Невозможно проанализировать строку "ABCD" в позиции 0.

Могу ли я использовать функцию для преобразования тех записей в целые числа (или, по крайней мере, обрезать начальные 0), которые не содержат текстовых символов?

В конечном счете, я хочу сгруппировать по этому столбцу и не хочу отдельных записей для 1234 и 0001234.

Спасибо!

Ответы [ 3 ]

4 голосов
/ 08 марта 2019

Почему бы не сохранить ваш столбец в виде строки? Если вы хотите, чтобы «1234» и «0001234» обрабатывались одинаково, вы всегда можете удалить начальные нули.

df.Product_ID.astype(str).str.lstrip('0')

0    ABCD
1    1234
2    1234
3    2345
4    4567
5    EFGH
Name: Product_ID, dtype: object
0 голосов
/ 08 марта 2019

Вы можете добавить .drop_duplicates к ответу @ coldspeed следующим образом, чтобы удалить повторяющиеся вхождения:

df = pd.DataFrame(data = [['ABCD'], ['1234'], ['0001234'], ['2345'], ['4567'], ['EFGH']], columns=['Product_ID'])
df.Product_ID = df.Product_ID.map(lambda x:x.lstrip('0'))
df.drop_duplicates(subset = ['Product_ID'], keep = 'first')

    Product_ID
0   ABCD
1   1234
3   2345
4   4567
5   EFGH
0 голосов
/ 08 марта 2019

Вы можете выполнить lstrip, чтобы удалить ненужные нули.

df['ABCD'] = df['ABCD'].map(lambda x: x.lstrip('0'))

После этого вы сможете выполнять группирование без преобразования типа столбца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...