Pandas:如何获取目录中每个文件行数的数据框?
Pandas:如何获取目录中每个文件行数的数据框?
我在目录中有一些.csv文件(abc.csv,def.csv等),我想要计算每个文件中的行数,并保存一个包含名称列和计数列的单个文件。我期望的输出如下:\n
df = name count abc .... def .... ghi ....
\n我正在尝试以下方法来计算行数,但无法将其转换为数据框。请给予建议。\n
import os path = '/some/path/to/file' for filename in os.listdir(path): with open(filename, 'r', encoding="latin-1") as fileObj: # -1 to exclude the header print("在csv文件{}中计算出的行数为:{}".format(filename, len(fileObj.readlines()) - 1))
使用pandas和pathlib库
from pathlib import Path import pandas as pd path_to_csv = 'your\\dir' file_info = pd.DataFrame( {file.name : pd.read_csv(file).shape for file in Path(path_to_csv).glob('*.csv')})\ .T.rename(columns={0 : 'rows', 1 : 'columns'}) print(file_info) rows columns 01_02_20.csv 3 3 01_28_20.csv 3 4 12_02_19.csv 77 10 12_09_19.csv 86 7
问题的出现原因:
需要统计目录中每个文件的行数,以便进行后续的数据处理和分析。
解决方法:
1. 导入pandas和pathlib库。
2. 设置待处理文件的目录路径。
3. 使用pathlib库中的glob()方法获取目录中所有的csv文件。
4. 使用列表生成式和字典生成式,遍历所有的csv文件,读取每个文件并计算文件的行数和列数,将结果存储在字典中。
5. 将字典转换为DataFrame,行表示文件名,列表示行数和列数。
6. 使用rename()方法将列名0和1分别改为'rows'和'columns'。
7. 打印输出DataFrame,显示每个文件的行数和列数。
问题的出现原因是需要统计目录中每个文件的行数,并将结果存储在一个DataFrame中。解决方法是使用Pandas库和Python的os模块来实现。
首先,需要导入所需的库和模块。Pandas库用于创建和操作数据框,os模块用于获取文件名和路径。
然后,定义一个变量path,表示目录的路径。
接下来,创建两个空列表names和counts,用于存储文件名和对应的行数。
使用os.listdir()函数获取目录中的所有文件名,并通过一个循环遍历每个文件。
在循环中,使用open()函数打开文件,并指定读取模式和编码方式。然后使用readlines()方法读取文件的所有行,并使用len()函数计算行数。由于要排除文件的标题行,需要将行数减去1。
将文件名和行数分别添加到names和counts列表中。
循环结束后,使用pd.DataFrame()函数创建一个数据框。将names和counts作为字典传递给该函数,字典的键分别对应数据框的列名。
最后,将结果存储在df数据框中。
需要注意的是,如果文件非常大,可以考虑使用其他方法来计算行数,因为readlines()方法返回的是一个包含所有行的列表。
这是解决问题的完整代码和步骤。通过这种方法,可以获取目录中每个文件的行数,并将其存储在一个方便的数据框中。