解析具有可变列数的数据

时间:2019-04-30 17:19:27

标签: python-3.x parsing genfromtxt

我有几个.txt文件,每个文件有140k +行。它们都有三种类型的数据,它们是字符串和浮点数的混合: -7列 -14列 -18列

解析此类数据的最佳最快方法是什么?

我尝试将numpy.genfromtxt与usecols = np.arange(0,7)一起使用,但显然切出14和18 col数据。

# for 7 col data
load = np.genfromtxt(filename, dtype=None, names=('day', 'tod', 'condition', 'code', 'type', 'state', 'timing'), usecols=np.arange(0,7))

我想尽可能高效地解析数据。

1 个答案:

答案 0 :(得分:0)

该解决方案非常简单直观。我们检查每行中的列数是否等于指定的数,并将其附加到数组中。为了更好地分析/修改我们的数据,我们可以根据需要将其转换为Pandas DataFrame或Numpy,下面我将显示转换为DataFrame。数据集中的列数是7、14和18。我希望对数据进行标记,因此可以使用Pandas的列从数组中进行标记。

import pandas as pd

filename = "textfile.txt"

labels_array1 = [] # 7 labels
labels_array2 = [] # 14 labels
labels_array3 = [] # 18 labels

with open(filename, "r") as f:
    lines = f.readlines()
    for line in lines:
        num_items = len(line.split())
        if num_items==7:
            array1.append(line.rstrip())
        elif num_items==14:
            array2.append(line.rstrip())
        elif num_items==18:
            array3.append(line.rstrip())
        else:
            print("Detected a line with different columns.", num_items)
df1 = pd.DataFrame([sub.split() for sub in array1], columns=labels_array1)
df2 = pd.DataFrame([sub.split() for sub in array2], columns=labels_array2)
df3 = pd.DataFrame([sub.split() for sub in array3], columns=labels_array3)