【问题标题】:Parsing data with variable number of columns解析具有可变列数的数据
【发布时间】:2019-09-19 09:49:39
【问题描述】:

我有几个 .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))

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

【问题讨论】:

    标签: python-3.x parsing genfromtxt


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多