【pandas小技巧】--读取多个文件

打印 上一主题 下一主题

主题 873|帖子 873|积分 2621

日常分析数据时,只有单一数据文件的情况其实很少见,更多的情况是,
我们从同一个数据来源定期或不定期的采集了很多数据文件;或者从不同的数据源采集多种不同格式的数据文件。
在这样的情况下,分析数据之前,需要将不同的数据集合并起来。
合并数据一般有两个维度,一是同构的数据集合并后行数增加;一是异构的数据集合并后列数增加。
1. 同构数据集

比如我们采集了3个不同年份的人口统计文件,分别为:
  1. import pandas as pd
  2. fp1 = "population1.csv"
  3. df = pd.read_csv(fp1)
  4. df
复制代码
  1. import pandas as pd
  2. fp2 = "population2.csv"
  3. df = pd.read_csv(fp2)
  4. df
复制代码
  1. import pandas as pd
  2. fp3 = "population3.csv"
  3. df = pd.read_csv(fp3)
  4. df
复制代码

合并所有的数据集可以用 pd.concat 方法,不过一个一个文件读取之后再合并比较麻烦。
如果文件名称有规律的话(一般定期采集的数据集文件,文件名都有一定的规律),可以通过 glob 库(支持通配符匹配)来匹配所有数据文件。
然后利用python代码的灵活性一次合并所有的数据。
  1. from glob import glob
  2. files = sorted(glob("./population[1-3].csv"))
  3. df = pd.concat((pd.read_csv(f) for f in files))
  4. df
复制代码

这样合并之后,发现索引是有重复的,如果要保持索引的唯一性,可以在合并时指定 ignore_index=True。
  1. df = pd.concat((pd.read_csv(f) for f in files), ignore_index=True)
  2. df
复制代码

2. 异构数据集

异构的数据集指数据结构不一样的数据,一般来自于不同的数据源。
比如:
  1. import pandas as pd
  2. fp1 = "population-total.csv"
  3. df = pd.read_csv(fp1)
  4. df
复制代码
  1. import pandas as pd
  2. fp2 = "population-man.csv"
  3. df = pd.read_csv(fp2)
  4. df
复制代码
  1. import pandas as pd
  2. fp3 = "population-woman.csv"
  3. df = pd.read_csv(fp3)
  4. df
复制代码

合并的方式和前面按行合并类似,区别在于指定 axis=1。
  1. from glob import glob
  2. files = sorted(glob("./population-*.csv"))
  3. df = pd.concat((pd.read_csv(f) for f in files), axis=1)
  4. df
复制代码

合并之后发现有重复的列,对于重复的行,可以简单的通过 drop_duplicates()方法来去重,
去除重复的列则需要一些技巧。
  1. df = df.loc[:, ~df.columns.duplicated()]
  2. df
复制代码

这样就去除了重复的列,完成了异构数据集的合并。
3. 附录

本篇使用的示例数据可以通过下面的url下载:

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

tsx81428

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表