首页 > 解决方案 > 遍历 csv 文件并创建表

问题描述

我正在尝试读取 .csv 文件并提取特定列,以便我可以输出一个表,该表基本上对特定列执行“GROUP BY”并聚合某些其他感兴趣的列(类似于您在 SQL 中的方式) ) 但我不太熟悉如何在 Python 中轻松地做到这一点。

csv 文件格式如下:

age,education,balance,approved
30,primary,1850,yes
54,secondary,800,no
24,tertiary,240,yes

我尝试导入并读取 csv 文件以解析我关心的三列并遍历它们以将它们放入三个单独的数组列表中。我不太熟悉包以及如何将它们放入具有 3 列的数据框或矩阵中,以便我可以遍历它们进行变异或执行所有聚合输出字段(请参见下面的预期结果)。

with open('loans.csv') as csvfile:
    readCSV = csv.reader(csvfile, delimiter = ',')

    next(readCSV)  ##skips header row

    education = []
    balance = []
    loan_approved = []

    for row in readCSV:
        educat = row[1]
        bal = row[2]
        approve = row[3]

        education.append(educat)
        balance.append(bal)
        loan_approved.append(approve)

    print(education)
    print(balance)
    print(loan_approved)

输出将是一个 4x7 的四行表格(按教育程度分组)和以下标题:

Education|#Applicants|Min Bal|Max Bal|#Approved|#Rejected|%Apps Approved
Primary  ...
Secondary  ...
Terciary ...

标签: pythonpandascsvpandas-groupby

解决方案


改用 Pandas 似乎要简单得多。例如,您可以只读取您关心的列而不是所有列:

import Pandas as pd

df = pd.read_csv(usecols=['education', 'balance', 'loan_approved'])

现在,按教育程度分组,您可以找到该列的所有唯一条目并将它们分组:

groupby_education = {}
for level in list(set(df['education'])):
    groupby_education[level] = df.loc[df['education'] == level]

print(groupby_education)

我希望这会有所帮助。如果您还需要帮助,请告诉我。干杯!


推荐阅读