我有這樣的資料框:
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'])
#更新2
Bill Lizard解決方案有效,但我不明白為什么BENY解決方案無效?為什么我cannot reindex from a duplicate axis在應用BENY解決方案時收到此錯誤
update3 我原來的 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....
uj5u.com熱心網友回復:
更新你的pandas,explode現在可以接受兩列
df['price'] = df['price'].str.split(',')
df['weight'] = df['weight'].str.split(',')
out = df.explode(['price','weight'])
uj5u.com熱心網友回復:
如果您有 1.3.0 之前的 Pandas 版本,其中添加了多列爆炸:
由于拆分后的字串有相同數量的元素的串列,你可以申請Series.explode到price和weight列到預期的輸出。
import pandas as pd
df = pd.DataFrame({'title': ['Crloni Model145'],
'price': ['$45,$50,$60'],
'weight': ['200gm,500gm,800gm']})
df['price']=df['price'].str.split(',')
df['weight']=df['weight'].str.split(',')
df = df.set_index(['title']).apply(pd.Series.explode).reset_index()
print(df)
我將索引設定為title因為我不想explode應用于該列,然后我在最后重置索引,因此title再次成為常規列。
輸出:
title price weight
0 Crloni Model145 $45 200gm
1 Crloni Model145 $50 500gm
2 Crloni Model145 $60 800gm
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/312280.html
標籤:Python 蟒蛇-3.x 熊猫 数据框 python-2.7
