假设我有一个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
任何帮助欣赏〜
解决方案:我使用pandas解决了这个问题:
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)
最简单的方法是根据发布的日期列对文件进行排序,并使用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
进行排序,但该解决方案会涉及更多(但这可能是一个很好的练习)。