【发布时间】:2021-11-21 12:13:38
【问题描述】:
我有这样的数据框:
title price weight
0 Crloni Model145 $45,$50,$60 200gm,500gm,800gm
这里 200 克 45 美元,500 克 50 美元和 800 克 60 美元。我预期的数据框将如下所示:
title price weight
0 Crloni Model145 $45 200gm
1 Crloni Model145 $50 500gm
2 Crloni Model145 $60 800gm
但现在我得到这样的数据框
title price weight
0 Crloni Model145 $45 200gm
1 Crloni Model145 $45 500gm
2 Crloni Model145 $45 800gm
3 Crloni Model145 $50 200gm
4 Crloni Model145 $50 500gm
5 Crloni Model145 $50 800gm
6 Crloni Model145 $45 200gm
7 Crloni Model145 $45 500gm
8 Crloni Model145 $45 800gm
9 Crloni Model145 $60 200gm
10 Crloni Model145 $60 500gm
11 Crloni Model145 $60 800gm
这是我的代码:
data['price']=data['price'].str.split(',')
data = data.explode('price')
data['weight']=data['weight'].str.split(',')
data = data.explode('weight')
更新问题:
我应用了 Bill the Lizard 解决方案。我没有收到任何错误,但在导出 csv 文件时,我的 csv 中没有看到任何价格和重量。
data['price']=data['price'].str.split(',')
data['weight']=df['weight'].str.split(',')
data = data.set_index(['title']).apply(pd.Series.explode).reset_index()
data.to_csv('...mypath/data.csv')
这是 BENY 解决方案,但我收到了 cannot reindex from a duplicate axis
data['price'] = data['price'].str.split(',')
data['weight'] = data['weight'].str.split(',')
out = data.explode(['price','weight'])
data['description'] = data['description'].mask(data['description].shift() == data['description'])
#update2
Bill the Lizard 解决方案有效,但我不明白为什么 BENY 解决方案无效?为什么我在应用 BENY 解决方案时收到cannot reindex from a duplicate axis 这个错误
更新3 我原来的excel文件的几行
category title price weight description
Shirt men-shirt 20,25,35 100gm,50gm,150gm shirt description....
pant men-pent 40,35,90 200gm,350gm,150gm pant description....
【问题讨论】:
-
您认为
.explode有缺陷还是您的期望有误?你能以不同的方式制作 DataFrame - 你能控制它吗? -
@wwii 我开始学习 pandas 和 python。我在谷歌和堆栈溢出上搜索找到解决方案,但我没有找到任何解决方案。我不知道如何解决这个问题,所以在这里我发布了我的问题。现在我还在努力寻找解决方案
-
如果你正在制作DataFrame,那么在该步骤中fix可能会更容易。您应该包含一个最小的数据示例和用于制作 DataFrame 的代码。
-
@wwii 你能给我举个例子吗?
-
我认为,当您尝试分解列表中值数量不同的多个列时,您会遇到该错误。您能否为 Excel 中显示的少数标题添加
price和weight的原始值?
标签: python python-3.x pandas dataframe python-2.7