将多个 CSV 文件导入 Pandas 并连接成一个 DataFrame
本篇文章介绍如何读取多个 .csv 文件并将所有 DataFrame 连接成一个。
本篇文章将使用 Pandas 读取数据文件并创建和组合 DataFrame。
什么是 Pandas
这个包带有广泛的函数来读取各种数据文件以及执行数据操作技术。
要在您的机器上安装 pandas 包,您必须打开命令提示符/终端并运行 pip install pandas
。
如何使用 Pandas 读取单个 .csv 文件
pandas 包提供了读取 .csv 文件的功能。
>>> import pandas as pd
>>> df = pd.read_csv(filepath_or_buffer)
给定文件路径,pandas 函数 read_csv()
将读取数据文件并返回对象。
>>> type(df)
<class 'pandas.core.frame.DataFrame'>
在 Python 中读取多个 CSV 文件
没有明确的函数可以仅使用 pandas 模块来执行此任务。 但是,我们可以设计一种合理的方法来执行以下操作。
首先,我们需要知道所有数据文件的路径。 如果所有文件都位于一个特定文件夹中,这将很容易。
创建一个列表,其中将存储所有文件的路径和名称。
>>> import pandas as pd
>>> import glob
>>> import os
>>> # This is a raw string containing the path of files
>>> path = r'D:\csv files'
>>> all_files = glob.glob(os.path.join(path, '*.csv'))
>>> all_files
['D:\\csv files\\FILE_1.csv', 'D:\\csv files\\FILE_2.csv']
在上面的代码中,创建了一个包含文件路径的列表。
glob模块
使用 glob 模块查找与模式匹配的文件或路径名。 glob 遵循标准 Unix 路径扩展规则来匹配模式。
无需在外部安装此模块,因为它已包含在 Python 中。 然而,如果你没有这个包,输入 pip install glob2,你应该可以开始了。
要从目录/文件和子目录/子文件中递归检索路径,我们可以使用 glob 模块的函数 glob.glob() 和 glob.iglob()。
语法:
glob.glob(pathname, *, recursive=False)
glob.iglob(pathname, *, recursive=False)
该函数将返回一个包含所有文件路径的列表。
例如,要从给定路径检索所有文件名,请在路径末尾使用星号 *
,将其作为字符串传递给 glob.glob('')
函数。
>>> for files in glob.glob(r'D:\csv files\*'):
print(files)
D:\csv files\FILE_1.csv
D:\csv files\FILE_2.csv
D:\csv files\textFile1.txt
D:\csv files\textFile2.txt
此外,在星号后指定文件扩展名以执行更有针对性的搜索。
>>> for files in glob.glob(r'D:\csv files\*.csv'):
print(files)
D:\csv files\FILE_1.csv
D:\csv files\FILE_2.csv
什么是原始字符串
在 Python 中,原始字符串是通过将 r 或 R 添加到文字字符串而形成的。 反斜杠 () 是 Python 原始字符串中的文字字符。
当我们想要一个带有反斜杠的字符串但不希望它被视为转义字符时,这很有用。
例如:
为了表示制表符和换行符等特殊字符,我们使用反斜杠 () 来表示转义序列的开始。
>>> print("This\tis\nnormal\tstring")
This is
normal string
但是,原始字符串将反斜杠 () 视为文字字符。 例如:
>>> print(r"This\tis\nnormal\tstring")
This\tis\nnormal\tstring
os 模块
Python 的 os 模块包含处理操作系统的方法。 os 包含在 Python 的基本实用程序模块中。
该模块提供了一种使用依赖于操作系统的功能的可移植方法。 Python 的 os.path 模块是 os 模块的子模块,用于操作通用路径名。
Python 的 os.path.join()
函数智能地连接一个或多个路径组件。 除最后一个路径组件外,此方法通过在每个非空部分之后恰好放置一个目录分隔符(“/”)来连接不同的路径组件。
在最终要链接的路径组件为空的末尾添加目录分隔符(“/”)。
如果路径组件表示绝对路径并且连接移动到表示绝对路径的组件,则删除所有先前连接的组件。
语法:
os.path.join(path, *path)
要合并不同的路径组件,请使用 os.path.join()
函数。
import os
path = 'Users'
os.path.join(path, 'Desktop', 'data.csv')
输出:
'Users\\Desktop\\data.csv'
在 Python 中连接多个 DataFrame
更进一步,使用从 glob.glob() 函数返回的路径来提取数据并创建数据帧。 随后,我们还将 Pandas 数据框对象附加到列表中。
代码:
dataframes = list()
for dfs in all_files:
data = pd.read_csv(dfs)
dataframes.append(data)
创建 dataframes 列表。
>>> dataframes
[dataframe1, dataframe2]
连接 dataframes。
pd.concat(dataframes, ignore_index = True)
pandas.concat()
方法与 Pandas 对象轴一起处理所有密集的串联操作,并将另一个轴上的索引的集合逻辑操作(并集或交集)作为可选的额外操作。
完整代码:
## importing the required modules
import pandas as pd
import os
import glob
## Path of the files
path = r'D:\csv files'
## joining the path and creating list of paths
all_files = glob.glob(os.path.join(path, '*.csv'))
dataframes = list()
## reading the data and appending the dataframe
for dfs in all_files:
data = pd.read_csv(dfs)
dataframes.append(data)
## Concatenating the dataframes
df = pd.concat(dataframes, ignore_index = True)
相关文章
如何将 Pandas DataFrame 的索引转换为列
发布时间:2023/03/21 浏览次数:116 分类:编程语言
-
本教程演示如何将 Pandas Dataframe 的索引转换为列,例如使用 set_index,reset_index 并创建多个索引。
在 Pandas DataFrame 列中将单列拆分为多列
发布时间:2023/03/21 浏览次数:190 分类:编程语言
-
在本教程中,我们将学习如何使用 pandas .split() 方法将 pandas Dataframe 列拆分为两列,在本文中,我们将以有效的方式看到 python 提示和技巧。
Pandas DataFrame DataFrame.transpose()函数
发布时间:2023/03/21 浏览次数:192 分类:编程语言
-
Pandas DataFrame transpose()函数将 DataFrame 的行改为列,反之亦然。
如何根据 Pandas 中的日期过滤 DataFrame 行
发布时间:2023/03/21 浏览次数:148 分类:编程语言
-
我们可以使用布尔型掩码,查询方法,isin 方法以及 between 方法基于 Pandas 中的日期来过滤 DataFrame 行。
Pandas groupby 计数
发布时间:2023/03/21 浏览次数:118 分类:编程语言
-
本教程解释了如何从 DataFrame 中使用 DataFrame.groupby()方法导出的组获得像 count、sum、max 以及更多的统计数据。
Pandas 中的内存错误
发布时间:2023/03/21 浏览次数:140 分类:学无止境
-
本篇文章探讨了 Pandas 中内存错误的概念。 什么是 Pandas 的内存错误 在使用 Pandas 时,分析师可能会遇到代码解释器抛出的多个错误。这些错误范围很广,可以帮助我们更好地调查问题
Pandas Series.value_counts() 函数
发布时间:2023/03/21 浏览次数:136 分类:Python
-
Pandas Series.value_counts()方法计算 Series 中每个独特元素的出现次数。