【问题标题】:Iterating through a csv file and creating a table遍历 csv 文件并创建表
【发布时间】:2019-09-29 10:24:42
【问题描述】:

我正在尝试读取 .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 ...

【问题讨论】:

  • 您的标签中列出了熊猫,但您没有显示任何熊猫代码。您尝试过使用该 API 做什么?

标签: python pandas csv pandas-groupby


【解决方案1】:

改用 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)

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

【讨论】:

  • 顺便说一句,我创建了字典“groupby_education”只是为了简化对任何兴趣点的访问。创建完成后,可以通过 groupby_education[level] 访问(例如 groupby_education['Bachelor'])
  • 如果你使用 pandas,为什么不使用groupby
  • 谢谢 - 它确实有助于创建数据框!我现在如何使用我感兴趣的其他列来创建和改变一个表。我很熟悉如何在 R 中做到这一点,但没有在 python 中做到这一点
  • @DYZ,在我看来,在字典中聚合组可能是让 Shane 开始使用 Pandas 的更简单方法,但我同意 groupby 是一个优雅的解决方案。
  • @Shane - 您只需执行以下操作即可创建新列: df['New_Column'] = some operation。我建议搜索关于您可能希望对数据框执行的特定操作的堆栈溢出问题
猜你喜欢
  • 2016-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-13
  • 2021-08-15
  • 2021-04-09
  • 2013-06-29
相关资源
最近更新 更多