首页 > 解决方案 > Python读入许多文件做一些任务输出到(Excel文件)

问题描述

我对Python有些熟悉,所以我想用Python解决以下问题。但其他语言的现成解决方案也受到赞赏。

我有以下问题。我要分析 318 个数据日志文件,每个文件大约 8.2MB,总共 2.6GB 数据。此数据日志文件包含相隔 3 秒的测量值,请参见下面的(简化)示例。

Time     Time Nr:    Date    System state    System state Nr:    Temp._01    Temp._02
0:05:09 309  1-1-2020   0       " 7,4 " " 7,5 "
0:05:12 312  1-1-2020   0       " 7,5 " " 7,5 "

每个文件包含一天的测量值,但有时一天有多个文件。也可能有短暂的间隙,没有记录任何内容。

我想进行一些简单的计算。给定无限的资源,我只需为每个时间步进行计算。但是我认为我最好将结果转换为每小时数据,以保持事情的可管理性。接下来,我想将每小时结果写入 Excel 文件。

一个想法是首先从 318 个文件中提取所有数据并将其写入 SQL 数据库。接下来进行计算,最后将每小时数据写入 Excel 文件。但是我没有使用 SQL 数据库的经验。处理这个问题的最佳方法是什么?使用什么数据库?

标签: pythonsqllarge-data

解决方案


我会用熊猫。首先用 pip 安装它:

点安装熊猫

我假设您的数据有制表符 (\t) 作为分隔符。如果是这样,您可以使用 pandas.read_csv 阅读它

您可以遍历所有日志文件并将它们与 pandas.concat 连接起来

import pandas
df = pandas.concat(
    [pd.read_csv(file, sep="\t") for file in list_of_files],
    axis=0,
    ignore_index=True)

现在你有了一个包含所有日志数据的数据框。您可以提取每条日志消息的小时数。

df["hour"] = df["Time"].str.split(":").str[0]

    Time    Time Nr:    Date    System state    System state Nr:    Temp._01    Temp._02    hour
0   0:05:09 309 1-1-2020    0   7,4 7,5 NaN 0
1   0:05:12 312 1-1-2020    0   7,5 7,5 NaN 0

要获取每小时统计信息,您可以按“日期”和“小时”使用 groupby。

例如:提取不同的“系统状态”以及每小时触发的次数。

df.groupby(["Date", "hour"])["System state"].value_counts()

Date      hour  System state
1-1-2020  0     0               2

推荐阅读