在Python数据框中部分转换列

时间:2019-03-08 20:01:55

标签: python pandas dataframe group-by

我在Python数据框中有一个如下所示的列:

Product_ID
ABCD
1234
0001234
2345
4567
EFGH

当前存储为对象数据类型。但是,我确实希望对数字进行合并(即1234与0001234是同一乘积)。由于该列中也有文本字符串,所以我无法将其转换为整数

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

ValueError:无法解析位置0处的字符串“ ABCD”。

我可以使用函数将那些条目转换为不包含文本字符的整数(或至少去除前导0)吗?

最终,我想按此列分组,并且不想为1234和0001234单独输入。

谢谢!

3 个答案:

答案 0 :(得分:4)

为什么不将您的列保留为字符串?如果希望对“ 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

答案 1 :(得分:0)

您可以执行lstrip删除不需要的零。

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

之后,您将能够执行groub而不转换列的类型。

答案 2 :(得分:0)

您可以像这样在{coldspeed的答案中添加.drop_duplicates来删除重复出现的内容:

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