我在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单独输入。
谢谢!
为什么不将列保留为字符串?如果您希望“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
您可以执行lstrip来删除不需要的零。
df['ABCD'] = df['ABCD'].map(lambda x: x.lstrip('0'))
您可以在不转换列类型的情况下执行分组。
您可以将.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