大傢好,我是皮皮。
一、前言
前幾天在Python白銀交流群【Jethro Shen】問了一個Pandas數據處理的問題。問題如下:各位大佬這種情況我怎麼處理一下啊?標記的商品內容後後面的數量是一一對應的 想把它們鋪開。
![](https://news.xinpengboligang.com/upload/keji/e4bd31410521bb27221b4b43e3765086.jpeg)
下面是他自己寫的代碼:
jigou_df = pd.read_excel(jigou_path)
data = {'商品內容':jigou_df['商品內容'],'數量':jigou_df['數量']}
df = pd.DataFrame(data)
df_expanded = df.assign(數量=df['數量'].astype(str).str.split(',')).explode('數量')
df_expanded.reset_index(drop=True, inplace=True)
df_expanded
不過運行結果不是他想要的。
二、實現過程
後來【瑜亮老師】給了一個提示:先對兩列執行split,然後再對兩列explode,df = df.explode(['商品內容', '數量']).reset_index(drop=True)
這裡【東哥】給出了具體的代碼,如下所示:
import pandas as pd
df = pd.read_excel("機構訂單_202401091514_1.0.xlsx")
# 使用split()函數拆分【商品內容】列的內容
df['商品內容'] = df['商品內容'].str.split('、')
df['數量'] = df['數量'].str.split('、')
# 使用explode()函數將拆分後的結果與【數量】列的內容進行合並
result = df.explode(['商品內容', '數量']).reset_index(drop=True)
# result = df.explode('商品內容').reset_index(drop=True)
print(result)
![](https://news.xinpengboligang.com/upload/keji/78a872fb114f9fc2e9c3327ee5e4379e.jpeg)
結果是可以出來的,不過最後兩行卻是nan,這個是為啥?我看excel中數據類型是數值,不是字符串,得到的結果就是nan。
![](https://news.xinpengboligang.com/upload/keji/2821357cae273294c964f668fcfb3868.jpeg)
如果我把最後兩行手動改為字符串格式的話,結果正常顯示。
![](https://news.xinpengboligang.com/upload/keji/d25ca32d32ab051122337731c9f3a4a7.jpeg)
![](https://news.xinpengboligang.com/upload/keji/416222ea5f46e03b14c7f8a6cd0bdbb2.jpeg)
後來搞定了,df['數量'] = df['數量'].astype("string").str.split('、'),加一行轉字符串就好了。
![](https://news.xinpengboligang.com/upload/keji/6b4d04cbd67a06e58cc955f3c43b3680.jpeg)
順利地解決了粉絲的問題。也可以讀取的時候直接dtype=str這樣避免這類的問題,也可以用astype,還可以map的時候lambda中用str(x).split,反正方法很多,都可以避免這類的問題。
![](https://news.xinpengboligang.com/upload/keji/e1be3c1b25a2dcad77ebdd8438ac44b2.jpeg)
如果你也有類似這種數據分析的小問題,歡迎隨時來交流群學習交流哦,有問必答!
三、總結
大傢好,我是皮皮。這篇文章主要盤點了一個Pandas數據處理的問題,文中針對該問題,給出了具體的解析和代碼實現,幫助粉絲順利解決了問題。
最後感謝粉絲【Jethro Shen】提出的問題,感謝【瑜亮老師】、【東哥】給出的思路,感謝【莫生氣】、【馮誠】等人參與學習交流。
【提問補充】溫馨提示,大傢在群裡提問的時候。可以註意下面幾點:如果涉及到大文件數據,可以數據脫敏後,發點demo數據來(小文件的意思),然後貼點代碼(可以復制的那種),記得發報錯截圖(截全)。代碼不多的話,直接發代碼文字即可,代碼超過50行這樣的話,發個.py文件就行。
![](https://news.xinpengboligang.com/upload/keji/534facef53d618b9c149f1896a20c4d5.jpeg)