Обработка данных с помощью Python: преобразование строки в строки

Я довольно новичок в Python, и мне нужно выполнить некоторые данные. Мне нужен совет относительно наилучшей практики для этого: библиотеки, модули, лучший код для реализации или просто руководство.

Итак, у меня есть текстовый файл с данными, организованными в следующем формате:

A:100 B:200 C:300

A:150 B:350 C:370

Т.е. каждая строка представляет связанные данные, 3 переменные, названные A/B/C. Каждая новая строка показывает данные, относящиеся к тем же переменным, но связанным с другим объектом.

Таким образом, мои данные находятся в текстовом файле, и я хочу вывести их в следующем формате:

100 '\t' 150

200 '\t' 350

300 '\t' 370

Т.е. строки данных для переменных A, B и C сведены в таблицу, так что я могу экспортировать их в графический инструментарий (возможно, Origin Pro).

Это код, который я придумал до сих пор:

with open("example.txt", 'r') as file:
    for line in file.readlines():
        line = line.replace(' ', '\n')
        line = line.split(':',  1)[-1]
        print line

Это преобразует данные в следующее:

100
B:200
C:300

150
B:350
C:370

Поскольку.split(), очевидно, выполняется только в каждой строке перед использованием.replace() для добавления новых строк между данными. Я чувствую, что после того, как я использую.replace(), мне нужно снова начать цикл по строкам для повторного выполнения.split() или даже просто строки [2:], чтобы удалить имена ведущих переменных - но тогда я не могу думать как я собираюсь табулировать данные также для каждой строки для создания столбцов?

Есть идеи? Спасибо!

3 ответа

Очевидно, вам нужна некоторая структура данных для хранения значений ваших переменных. Наиболее подходящим является словарь списков:

d = {'A': [], 'B': [], 'C': []}

Затем вы просматриваете файл, разбивая каждую строку на элементы "Имя: значение", а затем разбивая эти элементы на : подписывать и хранить значения соответствующим образом:

with open("example.txt", 'r') as file:
    for line in file:
        elements = line.rstrip().split()
        for e in elements:
            (name, value) = e.split(':')
            d[name].append(value)

и, наконец, вы выводите свои данные, по одной переменной на строку:

for k in sorted(d):
    print('\t'.join(d[k]))

Я предлагаю использовать pandas библиотека:

import pandas as pd

df = pd.read_csv(path_to_infile, sep=' ', header=None, names=['A', 'B', 'C'])
df = df.applymap(lambda x: int(x[2:]))
df.to_csv(path_to_outfile, sep='\t', header=False, index=False)

После Вас import pandas ты можешь использовать read_csv функция для загрузки файла в фрейм данных с некоторыми дополнительными аргументами, такими как:

  • sep который используется для объявления разделителя
  • header это может использоваться, чтобы указать, что у вас нет имен столбцов
  • names который используется для присвоения имен столбцам

После этого вы можете использовать applymap Функция на весь фрейм данных для удаления имен переменных и двоеточий.

Наконец, вы можете использовать to_csv способ сохранить файл в нужном месте, снова без header но на этот раз без index также, потому что это добавит столбец индекса по умолчанию.

Как видите, вы снова можете использовать sep аргумент для объявления нового разделителя.

Вы можете сделать это, используя панд, что делает это действительно легко:

import pandas as pd

df = pd.read_csv(file_path,sep=' ',header=None,names = ['A','B','C'])
output = df.apply(lambda x:x[.str.replace('^([A-Z]:)','')],axis=1).T
output.to_csv(file_path,sep='\t',header = False, index = False)

документация:

pandas.apply

pandas.read_csv

pandas.to_csv

Другие вопросы по тегам