我目前正在做一些大資料作業。我在 .CSV 中有一個問題,我需要將多行單單元文本塊拆分為單個單元格。下表顯示了所需的輸出。目前,所有“成分”都在同一個單元格中,每種成分都有自己的新行(Stack Overflow 不允許我在同一個單元格中創建新行)。
我需要撰寫一個腳本來將這個單一的成分單元格拆分為下面的輸出,使用單元格中的每個新行作為分隔符。我使用它的實際用例要復雜得多——超過 200 個“專案”,每個“專案”有 50-150 個“成分”。我目前正在 excel 中手動執行此操作,其中包含一系列文本到列和轉置粘貼,但大約需要 2-2.5 個完整作業日才能完成。
鏈接到資料
下面的代碼
| 物品 | 原料 |
|---|---|
| 咖啡 | 咖啡豆 |
| 牛奶 | |
| 糖 | |
| 水 |
import pandas as pd
df = pd.read_csv(r'd:\Python\menu.csv', delimiter=';', header=None)
headers = ["Item", "Ingredients"]
df.columns = headers
df["Ingredients"]=df["Ingredients"].str.split("\n")
df = df.explode("Ingredients").reset_index(drop=True)
df.to_csv(r"D:\Python\output.csv")
uj5u.com熱心網友回復:
以下是使用 Python 的標準csv ^1 ^2模塊的方法:
import csv
writer = csv.writer(open('output.csv', 'w', newline=''))
reader = csv.reader(open('input.csv', newline=''))
writer.writerow(next(reader)) # copy header
for row in reader:
item = row[0]
ingredients = row[1].split('\n')
first_ingredient = ingredients[0]
writer.writerow([item, first_ingredient])
for ingredient in ingredients[1:]:
writer.writerow([None, ingredient]) # None for a blank cell (under the item)
鑒于你的小樣本,我得到這個:
| 物品 | 原料 |
|---|---|
| 咖啡 | 咖啡豆 |
| 牛奶 | |
| 糖 | |
| 水 |
uj5u.com熱心網友回復:
使用您的代碼和鏈接資料將分隔符更改為逗號,如下所示。
import pandas as pd
df = pd.read_csv('Inventory.csv', delimiter=',')
df["Software"]=df["Software"].str.split("\n")
df = df.explode("Software").reset_index(drop=True)
# Remove rows having empty string under Software column.
df = df[df['Software'].astype(bool)]
df = df.reset_index(drop=True)
df.to_csv("out_Inventory.csv")
print(df.to_string())
輸出
Hostname Software
0 ServerName1 Windows Driver Package - Amazon Inc. (AWSNVMe) SCSIAdapter (08/27/2019 1.3.2.53) [version 08/27/2019 1.3.2.53]
1 ServerName1 Airlock Digital Client [version 4.7.1.0]
2 ServerName1 AppFabric 1.1 for Windows Server [version 1.1.2106.32]
3 ServerName1 BlueStripe Collector [version 8.0.3]
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/418862.html
標籤:
上一篇:如何使用pythonpandas在各個行中查找特定字串
下一篇:只有在瀏覽器中打開主頁(url)的另一個URL時,才能從URL(url1)下載csv檔案。如何在python中實作
