使用带有文件列表的 Pandas read_table

Posted

技术标签:

【中文标题】使用带有文件列表的 Pandas read_table【英文标题】:Using Pandas read_table with list of files 【发布时间】:2017-09-11 04:34:50 【问题描述】:

总的来说,我对 Python 很陌生,但我正在尝试制作一个脚本,该脚本从文件夹中的某些文件中获取数据并将其放入 Excel 电子表格中。

我的代码会在我指定的文件夹中找到我想要的文件类型,然后列出完整的文件路径。

import os
file_paths = []

for folder, subs, files in os.walk('C://Users/Dir'):
    for filename in files:
        if filename.endswith(".log") or filename.endswith(".txt"):

                file_paths.append(os.path.abspath(os.path.join(folder,filename)))

它还将采用特定的文件路径,从正确的列中提取数据,并将其放入 excel 中正确的单元格中。

import pandas as pd
import numpy

for i in range(len(file_paths)):
    fields = ['RDCR']
    data = pd.read_table(file_paths[i], sep= "\s+", names = fields, usecols=[3], 

我遇到的问题是让 read_table 遍历我的文件列表并将数据放入 Excel 表中,每次读取一个新文件时,它都会在电子表格中的一列上移动。

理想情况下,for 循环会查看 file_paths 列表的长度,并将其用作范围。然后它会使用 file_paths[i] 将文件名一一输入到 read_table 中。

它会找到file_paths的长度,而不是一个一个地遍历其中的文件,它只是输入列表中最后一个文件的数据。

任何帮助将不胜感激!谢谢!

【问题讨论】:

【参考方案1】:

尝试一次将所有这些连接起来并写入一次excel。

from glob import glob
import pandas as pd

files = glob('C://Users/Dir/*.log') + glob('C://Users/Dir/*.txt')

def read_file(f):
    fields = ['RDCR']
    return pd.read_table(
        f, sep="\s+",
        names=fields, usecols=[3])

df = pd.concat([read_file(f) for f in files], axis=1).to_excel('out.xlsx')

【讨论】:

感谢您的建议。我用你的代码做了一些修改,它更干净了! 最后一个问题:我从中导入数据的文件有时会在不同的行上开始数字表。有没有办法告诉python在第一行用数字而不是特定行开始列?这样它就可以解释我想要的数据位置的变化。 @JohnZilverberg 我建议问一个不同的问题。分开回答会很有用。

以上是关于使用带有文件列表的 Pandas read_table的主要内容,如果未能解决你的问题,请参考以下文章

如何在使用 Pandas.read_gbq 加载带有列表列的表后恢复结构?

使用带有 DateOffset 的 pandas Series.rolling

带有列名列表的 Python Pandas 索引数据框

如何从带有列表的嵌套字典构建 MultiIndex Pandas DataFrame

如何从带有列表的嵌套 Json 创建 pandas DataFrame

Python:将带有pandas的SQL结果读取到用于for循环的列表中时出现问题