我有一個看起來像這樣的 csv,
#cars.csv
Bugatti, Veyron
Bugatti, Chiron
VW, Golf
VW, Passat
VW, Polo
VW, Caddy
Opel, Insignia
我想像這樣創建兩個單獨的串列:
brands = ["Bugatti","VW","Opel"]
models = [["Veyron","Chiron"],
["Golf","Passat","Polo","Caddy"],
["Insignia"]]
沒有大熊貓有什么可能的方法嗎?我在匯入熊貓時遇到了麻煩,所以我正在尋找一種替代方法來做到這一點。感謝所有幫助!
uj5u.com熱心網友回復:
干得好:
import csv
file = open("cars.csv")
csvreader = csv.reader(file)
rows = [i for i in csvreader]
brands = []
models = []
for brand, model in rows:
if brand in brands:
models[brands.index(brand)].append(model)
else:
brands.append(brand)
models.append([model])
file.close()
uj5u.com熱心網友回復:
from collections import defaultdict
def parse(file, delimiter=', '):
with open(file) as f:
result = defaultdict(list)
for line in f.readlines():
brand, model = line.split(delimiter)
result[brand].append(model)
return result
result = parse('cars.csv')
# fit the special data format
brands = list(result.keys())
models = [result[key] for key in brands]
如果您有任何問題,請告訴我。
uj5u.com熱心網友回復:
你可以看看convtools庫,它提供了很多資料處理原語
from convtools import conversion as c
from convtools.contrib.tables import Table
# prepare converter (this is where code generation happens, so
# it's better to store the converter somewhere for further reuse)
converter = (
c.group_by(c.item("brand"))
.aggregate(
{
"brand": c.item("brand"),
"models": c.ReduceFuncs.ArrayDistinct(c.item("model")),
}
)
.pipe(
{
"brands": c.iter(c.item("brand")).as_type(list),
"models": c.iter(c.item("models")).as_type(list),
}
)
.gen_converter()
)
# read the csv
rows = Table.from_csv(
"cars.csv",
header=["brand", "model"],
dialect=Table.csv_dialect(skipinitialspace=True),
).into_iter_rows(dict)
# process the rows
assert converter(rows) == {
"brands": ["Bugatti", "VW", "Opel"],
"models": [
["Veyron ", "Chiron"],
["Golf", "Passat", "Polo", "Caddy"],
["Insignia"],
],
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/339530.html
