Разбор данных с переменным количеством столбцов - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть несколько файлов .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))

Я хотел бы проанализировать данные максимально эффективно.

1 Ответ

0 голосов
/ 05 мая 2019

Решение довольно простое и интуитивно понятное.Мы проверяем, равно ли количество столбцов в каждой строке указанному числу, и добавляем его в массив.Для лучшего анализа / модификации наших данных мы можем затем преобразовать их в 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)
...