在Python数据帧中部分转换列

问题描述 投票:1回答:3

我在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单独输入。

谢谢!

python pandas dataframe group-by
3个回答
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

0
投票

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

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

您可以在不转换列类型的情况下执行分组。


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
© www.soinside.com 2019 - 2024. All rights reserved.