我在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单独输入。
谢谢!
答案 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