查看原文
其他

上百个数据文件合并,只能手动复制粘贴?教你一招十秒搞定!

EarlGrey 编程派 2020-09-13

在工作中,我经常要做些数据分析,比如找出订单的日变化趋势。但在准备数据源的时候,后台导出给我的一个一个的 .csv 文件,虽然文件数量不多,但是手动把它们整合成一个文件这种事情,是很费时间且没有成就感的。

以上图为例 ,数据集中有 9 个 CSV 文件,每个文件包含一期售卖课程的订单。但假设你面对的是上百个文件呢?为了更方便地进行分析,我需要将这些文件的数据整合至 1 个 CSV 文件,并且补充上文件名中的课程期数信息。

本文将介绍如何利用 Pandas 来实现上述需求。

读取文件

首先,我们先学习如何读取 CSV 文件,并保存在 DataFrame 中。Pandas 提供了两种方式,支持读取本地文件和网络文件。

我们的场景是数据集保存在本地磁盘。可以从脚本当前的位置提供文件的相对路径作为参数,也可以用文件的绝对路径作为参数。如果数据文件存储在网络上,则将文件路径参数替换为文件的 URL 即可。

  1. import pandas as pd


  2. df = pd.read_csv('data/包1第1期.csv', encoding='utf-8')

  3. df.head()

<<<上下左右滑动,查看更多代码细节>>>

如果出现中文乱码,可以试着将 encoding 的值改为 gbkgb18030 等中文编码。

读取时进行处理

很多情况下,CSV 文件中可能会包含你分析时不需要的数据,或者是文件中的数据不够规范。Pandas 也提供了对应的处理方案。

上面是 Pandas 官方文档中显示的, read_csv 方法所接受的所有参数。我们不会全部用到,只介绍本文场景中需要的 index_colusecolsskiprows 等参数。

指定索引及所需的列

假设我们只需要订单号、用户昵称、购买时间、退款时间这几列数据即可,并指定订单号作为索引列,那么可以传入 index_colusecols 参数进行制定。

  1. cols = [0, 3, 7, 12] # 注意,列数的起始值为 0

  2. df = pd.read_csv('data/包1第1期.csv',

  3.                index_col=0, usecols=cols)

  4. df.head()

<<<上下左右滑动,查看更多代码细节>>>

跳过指定行

假设我们拿到的数据文件不是规范的,比如像下图这样从第 3 行开始,才是表格化的数据。

如果直接执行 pd.read_csv ,Pandas 会报解析错误。

因此在加载这类数据文件时,就需要跳过不规范的部分,比如本例中要跳过前 3 行,从第 4 行开始。我们可以使用 skiprows 参数。

  1. df = pd.read_csv('data/orders/包1第1期.csv', index_col=0,

  2.     skiprows=3)

  3. df.head()

<<<上下左右滑动,查看更多代码细节>>>

一次性读取多个文件

上面讲完针对每一个 CSV 文件所需要做的操作,接下来我们就正式进入本文的重点,一次性读取多个 CSV 文件至 DataFrame

这里推荐使用 glob 库获取所有文件的路径,然后通过列表推导完成数据文件读取,最后利用 pd.concat 方法拼接 DataFrame

  1. import glob


  2. csv_files = glob.glob('data/包*第*期.csv')

  3. dfs = [pd.read_csv(csv_file) for csv_file in csv_files]


  4. df = pd.concat(dfs, sort=False)

  5. df.count()

<<<上下左右滑动,查看更多代码细节>>>

如果对这项操作的使用比较频繁,建议将上述步骤封装为函数,每次调用时传入所需要的文件路径即可。

导出 CSV 文件

数据整合完毕之后,还剩最后一步,导出为一个 CSV 文件,并保存至本地。这步相对简单,通过 to_csv 方法实现,注意指定导出文件的编码格式。

  1. df.to_csv('merged_orders.csv', index=False, encoding='utf-8')

总结

本文通过一个常见的数据处理需求,即一次读取多个CSV文件,介绍了如何利用 Pandas 读取 CSV 文件,并在读取时指定索引、指定列、跳过指定行和拼接 DataFrame 等操作。

前面也提到 read_csv 方法还支持很多个其他的参数,大家可以根据自身的需求去实际测试使用。

END


你工作中有批量处理的需求吗?你是怎么做的?


欢迎留言和我们分享



如果觉得文章对你有所帮助,欢迎点赞并且推荐给你的好友。


Pandas 初学者优化指南

使用 Pandas 处理亿级数据

使用 Python 分析 14 亿条数据

题图:pexels,CC0 授权。

点击阅读原文,查看更多 Python 教程和资源。

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存