盤點一個Excel數據分割和explode()實戰問題

2024年2月6日 19点热度 0人点赞

大傢好,我是皮皮。

一、前言

前幾天在Python白銀交流群【Jethro Shen】問了一個Pandas數據處理的問題。問題如下:各位大佬這種情況我怎麼處理一下啊?標記的商品內容後後面的數量是一一對應的 想把它們鋪開。

下面是他自己寫的代碼:

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)

結果是可以出來的,不過最後兩行卻是nan,這個是為啥?我看excel中數據類型是數值,不是字符串,得到的結果就是nan。

如果我把最後兩行手動改為字符串格式的話,結果正常顯示。

後來搞定了,df['數量'] = df['數量'].astype("string").str.split('、'),加一行轉字符串就好了。

順利地解決了粉絲的問題。也可以讀取的時候直接dtype=str這樣避免這類的問題,也可以用astype,還可以map的時候lambda中用str(x).split,反正方法很多,都可以避免這類的問題。

如果你也有類似這種數據分析的小問題,歡迎隨時來交流群學習交流哦,有問必答!

三、總結

大傢好,我是皮皮。這篇文章主要盤點了一個Pandas數據處理的問題,文中針對該問題,給出了具體的解析和代碼實現,幫助粉絲順利解決了問題。

最後感謝粉絲【Jethro Shen】提出的問題,感謝【瑜亮老師】、【東哥】給出的思路,感謝【莫生氣】、【馮誠】等人參與學習交流。

【提問補充】溫馨提示,大傢在群裡提問的時候。可以註意下面幾點:如果涉及到大文件數據,可以數據脫敏後,發點demo數據來(小文件的意思),然後貼點代碼(可以復制的那種),記得發報錯截圖(截全)。代碼不多的話,直接發代碼文字即可,代碼超過50行這樣的話,發個.py文件就行。