2017-02-20 15 views
-1

Предположим, что у меня есть CSV-файл, где в первом столбце прогноз даты, на втором месте выдаются дату, а в третьем столбце прогнозные значения:удалить строки с повторяющимися значениями в одном столбце и старше метки времени

forecast,issued,temp 
2016021700,2016021702,5.3 
2016021706,2016021702,6.3 
2016021712,2016021702,8.6 
2016021718,2016021702,5.1 
2016021700,2016021703,5.4 
2016021706,2016021703,6.4 

В python я хотел бы автоматически удалить эти строки с той же датой прогноза и более старой датой. Выход должен быть в порядке даты/времени в соответствии с датой прогноза. Ожидаемый результат:

forecast,issued,temp 
2016021700,2016021703,5.4 
2016021706,2016021703,6.4 
2016021712,2016021702,8.6 
2016021718,2016021702,5.1 

Любая помощь ценят ~

РЕШЕНИЕ: Я решил это с помощью панд:

import pandas as pd 

df = pd.read_csv('data.csv') 
df = df.drop_duplicates(subset='forecast',keep='last') 
df = df.sort(['forecast'],ascending=True) 
df.to_csv('out.csv',index=False) 
+0

Вы должны попробовать что-то самостоятельно и прийти сюда с кодом, если ему нужна помощь –

+0

Спасибо за ваш комментарий. К сожалению, я действительно не знаю, с чего начать, и все мои усилия были слишком далеки от того, что я ожидал, и не достойны публиковать здесь. Если я подожду ближе, я поделюсь. На этот момент любое предложение поможет. – jazera

ответ

0

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

from itertools import groupby 

# open a csv_reader for the file 
data = sorted(csv_reader, key=lambda cols: make_date(cols[1])) 
no_dups_data = [] 
for key, group in groupby(data, key=lambda cols: cols[1]): 
    no_dups_data.append(next(group)) 

Где make_date должен проанализировать дату в формате, который у вас есть. Для этого вы должны использовать модуль datetime.

Вы также можете избежать сортировки с использованием некоторого dict s, но это решение было бы немного более сложным (но это могло бы быть хорошим упражнением).

+0

Благодарим вас за предложение. Это дало мне некоторые идеи о сортировке. Моим окончательным решением является использование pandas (код ниже) – jazera