gpt4 book ai didi

python - 将丑陋的 csv 解析为 Pandas DataFrame 的最佳方法

转载 作者:行者123 更新时间:2023-12-04 04:19:44 25 4
gpt4 key购买 nike

我的目的是将 Matlab 代码迁移到 Python 代码中。我是 python 的新手,但我仍然在尝试分离一个 csv 文件

我的目的是解析一个 CSV 文件,其结构类似于以下文件:

SENSORID;DATESMPL;TRE;ISRC
FQBI-000-001;08/01/2020 13:56:00;-10.0956;0.03662119
LAMBDAS;1550;1551;1552;1553;1554
REFERENCE;6961.058824;6959.564706;6959.423529;6960.988235;6961.788235
1;166;164;162;138;162
2;146;152;161;143;142
3;138;147;150;133;124
4;134;120;158;145;133
5;135;157;135;139;137

预期结果(在 python DataFrame 上):

    SENSORID         DATESMPL           TRE       ISRC     1550  1551  1552  1553  1554
0 FQBI-000-001 08/01/2020 13:56:00 -10.0956 0.03662119 166 164 162 138 162
1 FQBI-000-001 08/01/2020 13:56:00 -10.0956 0.03662119 146 152 161 143 142
2 FQBI-000-001 08/01/2020 13:56:00 -10.0956 0.03662119 138 147 150 133 124
3 FQBI-000-001 08/01/2020 13:56:00 -10.0956 0.03662119 134 120 158 145 133
4 FQBI-000-001 08/01/2020 13:56:00 -10.0956 0.03662119 135 157 135 139 137

Reference 行将被丢弃。SENSORID、DATESMPL、TRE 和 ISRC 的值必须为每个实际测量数据行(以 1 到 5 的整数开头的行)复制。

当然,我必须解析的实际 CSV 比我的示例大得多,即 LAMBDA 从 1550 到 1850,并且有 255 个测量行(每个文件大约 250 kB)。

为了让事情变得更简单,我最终将不得不导入多达 10000 个这些文件并将它们存储在一个唯一的 DataFrame 中。

借助 Matlab,我可以使用 textscan 函数解析这些文件,并将数据存储在统计工具箱提供的数据集对象中。导入 10 000 个这些文件可以在不到 10 分钟的时间内完成,对于这种情况来说是可以接受的。

在 Python 下执行此操作的最佳方法是什么?

似乎有很多方法可以做到这一点:

  • 以列表中的字符串形式读取文件内容
  • 使用 NumPy 数组或简单地使用
  • 使用 DataFrame.read_csv()

但我不确定什么是最有效的方法

我真的很想让性能接近(当然更好)我在 Matlab 上的性能。

最佳答案

正如您提到的性能很重要,我想投入两分钱作为更快的解决方案。该方法的执行速度比 Code_Different 的数据示例解决方案每个文件快 5-10 倍 - 如何处理更大的文件,但您必须自己测试

def parse(file):
columns = []
#general_values = [] # use this if the meta data columns are different
column_values = ['SENSORID', 'DATESMPL', 'TRE', 'ISRC']
measurement_values = []

with open('tmp.csv', "r") as f:
for index, row in enumerate(f):
if index > 3: # test for measurement rows first as you will do it most often
measurement_values.append(row[:-1].split(';')[1:])
# uncomment next elif-clause if the meta data column names differ per file
#elif index == 0: # first row -> SENSORID;DATESMPL;TRE;ISRC
# columns += row[:-1].split(';') # get rid of newline and split
elif index == 1: # second row -> meta data
general_values = row[:-1].split(';') # get rid of newline and split
elif index == 2: # fourth row -> Lambdas as column names
columns += row[:-1].split(';')[1:] # get rid of newline, split and delete 'LAMBDAS'

df_array = [columns]
for measurement in measurement_values:
df_array.append(general_values + measurement)
return pd.DataFrame(df_array)

df = parse('tmp.csv')

关于python - 将丑陋的 csv 解析为 Pandas DataFrame 的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59647231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com