10个实用的Python一行代码用于CSV处理

10个实用的Python一行代码用于CSV处理

💡 原文英文,约1200词,阅读约需5分钟。
📝

内容提要

本文介绍了使用Python内置csv模块进行CSV文件处理的常见操作,提供十个实用的一行代码示例,包括计算列总和、按组汇总、过滤行和统计唯一值,适合快速数据探索和调试。

🎯

关键要点

  • CSV文件在数据工作流程中无处不在,Python内置的csv模块可以快速处理CSV文件。
  • 使用Python内置csv模块和生成器表达式,可以在一行代码中完成常见的CSV任务。
  • 示例1:计算任意数值列的总和。
  • 示例2:按组查找具有最高聚合值的组。
  • 示例3:过滤并显示符合特定条件的行。
  • 示例4:获取每个唯一值的总和。
  • 示例5:查找并排名所有超过特定数值阈值的记录。
  • 示例6:快速确定任何列中存在多少个不同的值。
  • 示例7:对特定子集的数据进行条件聚合。
  • 示例8:同时应用多个过滤条件。
  • 示例9:生成数值列的最小值、最大值和平均值统计信息。
  • 示例10:创建一个新的CSV文件,仅包含符合条件的行。
  • 这些一行代码的示例适合快速数据探索和调试,但不适合生产数据处理和复杂错误处理。

延伸问答

如何使用Python计算CSV文件中某列的总和?

可以使用一行代码,结合csv模块和生成器表达式,计算任意数值列的总和,例如:print(f'Total: ${sum(float(r[3]) for r in __import__("csv").reader(open(path)) if r[0] != "transaction_id"):,.2f}')。

如何在CSV文件中按组查找具有最高聚合值的组?

可以使用字典推导式和max函数,例如:print(max({r[5]: sum(float(row[3]) for row in __import__('csv').reader(open(path)) if row[5] == r[5] and row[0] != 'transaction_id') for r in __import__('csv').reader(open(path)) if r[0] != 'transaction_id'}.items(), key=lambda x: x[1]))。

如何过滤CSV文件中的特定行并显示?

可以使用生成器表达式过滤行,例如:print("\n".join(f"{r[1]}: ${float(r[3]):,.2f}" for r in __import__('csv').reader(open(path)) if r[7] == 'Enterprise' and r[0] != 'transaction_id'))。

如何统计CSV文件中某列的唯一值数量?

可以使用集合和len函数,例如:print(len(set(r[2] for r in __import__('csv').reader(open(path)) if r[0] != 'transaction_id')))。

如何在CSV文件中进行条件聚合并计算平均值?

可以使用一行代码计算特定条件下的平均值,例如:print(f'Average: ${sum(float(r[3]) for r in __import__('csv').reader(open(path)) if r[6] == 'North America' and r[0] != 'transaction_id') / sum(1 for r in __import__('csv').reader(open(path)) if r[6] == 'North America' and r[0] != 'transaction_id'):,.2f}')。

如何将符合条件的行导出到新的CSV文件?

可以使用csv模块的writer方法,例如:__import__('csv').writer(open('filtered.csv','w',newline='')).writerows([r for r in list(__import__('csv').reader(open(path)))[1:] if float(r[3]) > 75000])。

➡️

继续阅读