Импортировать текстовый файл для обработки определенных столбцов
Я новичок в использовании Python. Но учитесь на практике использовать в моей обработке данных.
У меня есть большой файл данных в формате, как показано здесь.
Всегда неизвестно количество строк и столбцов. В этом примере показаны 2 последовательные строки.
1-й столбец - "время", а n-й столбец - релевантные данные, которые должны быть выбраны из идентификатора ("abc" в 1-й строке).
................
"2013-01-01 00:00:02" 228 227 15,65 15,84 14,85 14,68 14,53 13,75 12,45 12,55
"2013-01-02 00:01:03" 225 227 16,35 15,99 14,85 14,73 14,43 13,8 12,85 13,2
................
Желаемый результат как
- Столбец 1 = по времени, чтобы можно было рассчитать разницу во времени.
- столбец (n) = данные для дальнейшей обработки, должны быть в плавающем.
В моих прошлых испытаниях я попал в список, поэтому не смог преобразовать ни один из столбцов.
Я пытался искать в прошлых вопросах и ответах. Но все интерпретировать не удалось, так как я начинающий. Я рассчитываю на вашу быструю помощь, чтобы прочитать данные в виде столбца, чтобы обработать позже. Полагаю, о дальнейшей обработке можно позаботиться, поскольку это скорее математическая операция.
Я действительно благодарю вас за вашу помощь.
С уважением
Gouri
КОРРЕКЦИЯ-1:
Я понял, что pandas дает компактную версию для извлечения колонки, как мне было нужно ранее. Хорошее обучение после предложения от группы.
код выглядит следующим образом:
import pandas as pd
data = pd.read_csv(fp, sep='\t')
entry=[]
entry = data['u90']
print entry, '\n', entry[5]
out_file = open("out.txt", "w")
entry.to_csv(out_file)
С уважением
Gouri
3 ответа
Как отметил Хьюго Хонорем в комментарии, вы можете использовать панд.
Если вы не хотите вводить больше зависимостей в свой проект, вы можете использовать такую функцию:
from operator import itemgetter
def load_dataset(fp, columns, types=None, delimiter=' ', skip_header=True):
get_columns = itemgetter(*columns)
if skip_header:
next(fp)
dataset = []
for line in fp:
parts = line.split(delimiter)
columns = get_columns(parts)
if types is not None:
columns = [convertor(col) for convertor, col in zip(types, columns)]
dataset.append(columns)
return dataset
columns
должен быть список целых чисел, types
список вызываемых объектов, которые преобразуют нужные столбцы в типы, которые вы хотите, чтобы они были. Для поплавков просто пройдите float
а на свидание можно было пройти обычай to_date
функция.
Если вы заинтересованы в использовании регулярных выражений, а не панд, то для вашего набора данных работает следующий код.
import re
#l1 = ["\"2013-01-01 00:00:02\" 228 227 15.65 15.84 14.85 14.68 14.53 13.75 12.45 12.55",
#"\"2013-01-02 00:01:03\" 225 227 16.35 15.99 14.85 14.73 14.43 13.8 12.85 13.2"]
l1 = """"2013-01-01 00:00:02\" 228 227 15.65 15.84 14.85 14.68 14.53 13.75 12.45 12.55
"2013-01-02 00:01:03\" 225 227 16.35 15.99 14.85 14.73 14.43 13.8 12.85 13.2"""
l_match = re.findall(r'(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})\"\s\d+\s\d+\s\d+\.\d+\s(\d+\.\d+)',l1)
if l_match:
for each_find in l_match:
l_date = each_find[0]
l_number = float(each_find[1])
print l_date
print l_number
Выход
2013-01-01 00:00:02
15.84
2013-01-02 00:01:03
15.99
У вас есть файл CSV с пробелами в качестве разделителя, так что вы можете использовать библиотеку CSV ( https://docs.python.org/2/library/csv.html). В противном случае, вы можете читать построчно и анализировать с split()
f = open('myfile.csv','r')
for line in f.readlines():
date = line.split(' ')[0]
value = line.split(' ')[N]
Где N - столбец, в котором находится ваше значение (в вашем примере 4).
Тем не менее, я настоятельно рекомендую панд, это выведет качество вашего кода на новый уровень.