[英]Reading first element of each column and then the entire row in csv file
我有一個 csv 文件,如下所示:
Account Email User_Id User Type Base Role Last Login
123456 x@proton.com 111111 inter user 7
7891011 y@proton.com 222222 inter user 6
121314 z@proton.com 333333 inter user 5
並且還會有 50 行這樣的。 每個帳戶可以有多個用戶。 並且同一個帳戶可以在文件中多次列出。 我必須為每個帳戶創建一個新的 csv 文件。 對於每個帳戶,我必須選擇整行並復制其內容。 我該怎么做? 我如何選擇:
for each account number
if a csv file for this account does not exist already
create a new file
copy the entire now and paste it in the new csv file
我可以用這個創建一個新的 csv 文件:
with open("test.csv") as fp
但我不知道如何選擇每個帳號,然后將該行的內容復制並粘貼到新文件中。 我是 Python 的新手。 請幫忙
Python 默認自帶一個csv
模塊
import csv
def get_firsts(csvfile, skip_first=True):
with open(csvfile, 'r') as f:
data = csv.reader(f, delimiter=',')
if skip_first:
_ = next(data)
firsts = [row[0] for row in data]
return firsts
這將返回一個僅包含每行第一個元素的列表,如果它是列名,則可以去掉第一個元素。
你可以在python中使用pandas。
import pandas as pd
如果你有 DataFrame -> 沒問題
如果您不這樣做,您可以使用此行將您的 CSV 轉換為 DataFrame
df = pd.read_csv('your_csv_file.csv')
現在您可以使用這樣的 DataFrame 函數來選擇您的數據。
new_df = df.loc[df['Account'] == 123456]
new_df 也是一個 DataFrame。 您可以使用以下方法保存結果 DataFrame:
new_df.to_csv('results.csv')
您可以嘗試使用convtools庫,它提供了許多數據處理原語,包括聚合和 CSV 文件的助手:
from convtools import conversion as c
from convtools.contrib.tables import Table
dialect = Table.csv_dialect(delimiter="\t")
# read the input file
table = Table.from_csv("input_1.csv", header=True, dialect=dialect)
# remember the header
header = table.columns
# prepare a converter to group by first column (we could work with dicts, but
# it is slower), aggregate by storing rows in arrays
converter = (
c.group_by(c.item(0))
.aggregate({"account": c.item(0), "rows": c.ReduceFuncs.Array(c.this())})
.gen_converter()
)
# perform aggregation
data_by_accounts = converter(table.into_iter_rows(list))
# write files
for data in data_by_accounts:
Table.from_rows(data["rows"], header=header).into_csv(
"account_{}.csv".format(data["account"]), dialect=dialect
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.