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

pandas,技巧,读取,多个,文件 · 浏览次数 : 110

小编点评

**数据合并指南** **同构数据集** 1. 使用 pandas 的 `pd.concat` 方法合并数据集。 2. 使用 `glob` 库匹配文件名以创建文件列表。 3. 利用 `for`循环逐个读取文件并合并到一个新的 DataFrame 中。 4. 指定 `ignore_index=True` 以保持索引唯一性。 **异构数据集** 1. 使用 `pd.concat` 方法合并数据集。 2. 使用 `glob` 库匹配文件名以创建文件列表。 3. 使用 `axis=1` 指定合并的轴。 4. 对于重复的行,使用 `drop_duplicates` 方法去除重复值。 5. 利用 `drop_duplicates` 方法去除重复的列。 **示例代码** ```python import pandas as pd import glob # 同构数据集 files_1 = glob.glob("./population[1-3].csv") df_merged = pd.concat((pd.read_csv(f) for f in files_1)) # 异构数据集 files_2 = glob.glob("./population-*.csv") df_merged = pd.concat((pd.read_csv(f) for f in files_2), axis=1) # 输出合并后的 DataFrame print(df_merged) ``` **附录** * 使用 `glob` 库匹配文件名以创建文件列表。 * `drop_duplicates` 方法用于去除重复值。 * `ignore_index=True` 可保持索引唯一性。

正文

日常分析数据时,只有单一数据文件的情况其实很少见,更多的情况是,
我们从同一个数据来源定期或不定期的采集了很多数据文件;或者从不同的数据源采集多种不同格式的数据文件。

在这样的情况下,分析数据之前,需要将不同的数据集合并起来。
合并数据一般有两个维度,一是同构的数据集合并后行数增加;一是异构的数据集合并后列数增加。

1. 同构数据集

比如我们采集了3个不同年份的人口统计文件,分别为:

import pandas as pd

fp1 = "population1.csv"
df = pd.read_csv(fp1)
df

image.png

import pandas as pd

fp2 = "population2.csv"
df = pd.read_csv(fp2)
df

image.png

import pandas as pd

fp3 = "population3.csv"
df = pd.read_csv(fp3)
df

image.png

合并所有的数据集可以用 pd.concat 方法,不过一个一个文件读取之后再合并比较麻烦。
如果文件名称有规律的话(一般定期采集的数据集文件,文件名都有一定的规律),可以通过 glob 库(支持通配符匹配)来匹配所有数据文件。
然后利用python代码的灵活性一次合并所有的数据。

from glob import glob

files = sorted(glob("./population[1-3].csv"))
df = pd.concat((pd.read_csv(f) for f in files))
df

image.png

这样合并之后,发现索引是有重复的,如果要保持索引的唯一性,可以在合并时指定 ignore_index=True

df = pd.concat((pd.read_csv(f) for f in files), ignore_index=True)
df

image.png

2. 异构数据集

异构的数据集指数据结构不一样的数据,一般来自于不同的数据源。
比如:

import pandas as pd

fp1 = "population-total.csv"
df = pd.read_csv(fp1)
df

image.png

import pandas as pd

fp2 = "population-man.csv"
df = pd.read_csv(fp2)
df

image.png

import pandas as pd

fp3 = "population-woman.csv"
df = pd.read_csv(fp3)
df

image.png

合并的方式和前面按行合并类似,区别在于指定 axis=1

from glob import glob

files = sorted(glob("./population-*.csv"))
df = pd.concat((pd.read_csv(f) for f in files), axis=1)
df

image.png

合并之后发现有重复的列,对于重复的行,可以简单的通过 drop_duplicates()方法来去重,
去除重复的列则需要一些技巧。

df = df.loc[:, ~df.columns.duplicated()]
df

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

3. 附录

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

  1. population1.csv:http://databook.top:8888/pandas-tricks/population1.csv
  2. population2.csv:http://databook.top:8888/pandas-tricks/population2.csv
  3. population3.csv:http://databook.top:8888/pandas-tricks/population3.csv
  4. population-total.csv:http://databook.top:8888/pandas-tricks/population-total.csv
  5. population-man.csv:http://databook.top:8888/pandas-tricks/population-man.csv
  6. population-woman.csv:http://databook.top:8888/pandas-tricks/population-woman.csv

与【pandas小技巧】--读取多个文件相似的内容:

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

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

【pandas小技巧】--日期相关处理

日期处理相关内容之前`pandas基础`系列中有一篇专门介绍过,本篇补充两个常用的技巧。 # 1. 多列合并为日期 当收集来的数据中,年月日等信息分散在多个列时,往往需要先合并成日期类型,然后才能做分析处理。合并多列转换为日期类型,可以直接用 `to_datetime`函数来处理: ```pytho

【pandas小技巧】--数据转置

所谓**数据转置**,就是是将原始数据表格沿着对角线翻折,使原来的行变成新的列,原来的列变成新的行,从而更方便地进行数据分析和处理。 `pandas`中`DataFrame`的转置非常简单,每个`DataFrame`对象都有一个`T`属性,通过这个属性就能得到转置之后的`DataFrame`。下面介

【pandas小技巧】--统计值作为新列

这次介绍的小技巧不是统计,而是把统计结果作为**新列**和原来的数据放在一起。`pandas`的各种统计功能之前已经介绍了不少,但是每次都是统计结果归统计结果,原始数据归原始数据,没有把它们合并在一个数据集中来观察。 下面通过两个场景示例来演示如果把统计值作为新列的数据。 # 1. 成绩统计的场景

【pandas小技巧】--category类型补充

`category`类型在**pandas基础**系列中有一篇介绍数据类型的文章中已经介绍过。`category`类型并不是`python`中的类型,是`pandas`特有的类型。 `category`类型的优势那篇文章已经介绍过,当时只是介绍了如何将某个列的数据转换成`category`类型,以及

【pandas小技巧】--DataFrame的显示参数

我们在`jupyter notebook`中使用`pandas`显示`DataFrame`的数据时,由于屏幕大小,或者数据量大小的原因,常常会觉得显示出来的表格不是特别符合预期。 这时,就需要调整`pandas`显示`DataFrame`的方式。`pandas`为我们提供了很多调整显示方式的参数,具

【pandas小技巧】--DataFrame的显示样式

上一篇介绍了`DataFrame`的显示参数,主要是对`DataFrame`中值进行调整。 本篇介绍`DataFrame`的显示样式的调整,显示样式主要是对表格本身的调整,比如颜色,通过颜色可以突出显示重要的值,观察数据时可以更加高效的获取主要信息。 下面介绍一些针对单个数据和批量数据的样式调整方式

【pandas小技巧】--花哨的DataFrame

最近github上发现了一个库(`plottable`),可以用简单的方式就设置出花哨的 `DataFrame` 样式。 github上的地址:[https://github.com/znstrider/plottable](https://github.com/znstrider/plottabl

【pandas小技巧】--目录(完结)

`pandas`小技巧系列是介绍的是使用`pandas`分析数据时,最常用的一些操作技巧。 具体包括: 1. [创建测试数据](https://www.cnblogs.com/wang_yb/p/17552748.html) 学习pandas的过程中,为了尝试pandas提供的各类功能强大的函数,常

【pandas小技巧】--创建测试数据

学习`pandas`的过程中,为了尝试`pandas`提供的各类功能强大的函数,常常需要花费很多时间去创造测试数据。 在`pandas`中,快速创建测试数据可以更快的评估 `pandas` 函数。通过生成一组测试数据,可以评估例如 `read_csv`、`read_excel`、`groupby`等