Py学习  »  Python

python数据帧中的部分转换列

Berbatov • 5 年前 • 1413 次点击  

我在python数据框中有一个列,如下所示:

Product_ID
ABCD
1234
0001234
2345
4567
EFGH

它当前存储为对象数据类型。但是,我确实希望这些数字合并(即1234与0001234是同一产品)。由于列中也有文本字符串,因此无法将其转换为整数

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

值错误:无法分析位置0处的字符串“abcd”。

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

最后,我希望按此列分组,不希望1234和0001234有单独的条目。

谢谢!

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/43018
 
1413 次点击  
文章 [ 3 ]  |  最新文章 5 年前
Hello.World
Reply   •   1 楼
Hello.World    6 年前

您可以添加 .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
Horbaje
Reply   •   2 楼
Horbaje    6 年前

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

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

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

cs95
Reply   •   3 楼
cs95    6 年前

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