解析列数可变的数据

Parsing data with variable number of columns

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

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

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

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

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

解决方案相当简单直观。我们检查每行中的列数是否等于指定的数字并将其附加到数组中。为了更好地 analysis/modification 我们的数据,我们可以根据需要将其转换为 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)