使用 Python 对 CSV 文件中的时间戳进行排序

Posted

技术标签:

【中文标题】使用 Python 对 CSV 文件中的时间戳进行排序【英文标题】:Sorting Timestamps inside a CSV file with Python 【发布时间】:2021-07-21 15:01:24 【问题描述】:

我正在尝试按给定的时间戳对 csv 文件的内容进行排序,但它似乎对我不起作用。它们是这样给出的:

2021-04-16 12:59:26+02:00

我当前的代码:

from datetime import datetime
import csv
from csv import DictReader

with open('List_32_Data_New.csv', 'r') as read_obj:
    csv_dict_reader = DictReader(read_obj)

    csv_dict_reader = sorted(csv_dict_reader, key = lambda row: datetime.strptime(row['Timestamp'], "%Y-%m-%d %H:%M:%S%z"))

    writer = csv.writer(open("Sorted.csv", 'w'))

    for row in csv_dict_reader:
        writer.writerow(row)

但是它总是抛出错误: time data '2021-04-16 12:59:26+02:00' does not match format '%Y-%m-%d %H:%M:%S%z'

我已经尝试了一个在线编译器,显然它在那里工作。

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

如果您使用 pandas 作为库,它可能会更容易一些(致谢:MrFuppes)。

import pandas as pd

df = pd.read_csv(r"path/your.csv")

df['new_timestamps'] = pd.to_datetime(df['timestamps'], format='%Y-%m-%d %H:%M:%S%z')
df = df.sort_values(['new_timestamps'], ascending=True)

df.to_csv(r'path/your.csv')

如果您仍然有错误,您也可以尝试像这样解析日期(致谢:Zerox):

from dateutil.parser import parse
df['new_timestamps'] = df['timestamps'].map(lambda x: datetime.strptime((parse(x)).strftime('%Y-%m-%d %H:%M:%S%z'), '%Y-%m-%d %H:%M:%S%z'))

不确定正确的日期时间格式?你可以试试自动检测infer_datetime_format=True

df['new_timestamps'] = pd.to_datetime(df['timestamps'], infer_datetime_format=True)

使用以下示例进行测试:

df = pd.DataFrame(['2021-04-15 12:59:26+02:00','2021-04-13 12:59:26+02:00','2021-04-16 12:59:26+02:00'], columns=['timestamps'])

【讨论】:

非常感谢您的回答!它现在对我有用。出于某种原因,它仍然给了我同样的错误,但是当我将其更改为 df['new_timestamps'] = df['timestamps'].map(lambda x: datetime.strptime((parser.parse(x)).strftime('%Y-%m-%d %H:%M:%S%z'), '%Y-%m-%d %H:%M:%S%z')) 时,它起作用了。只是想添加一些信息,以防有人遇到同样的问题。 很高兴我能帮上忙。我更新了我的答案,以将您的发现包括给未来的读者。请让我知道你是否可以。快乐编码! 您不应该需要 datetime 库来解析这些字符串(不错的 ISO8601),也不需要 dateutil ! pd.to_datetime 将使这个技巧更具可读性和效率。

以上是关于使用 Python 对 CSV 文件中的时间戳进行排序的主要内容,如果未能解决你的问题,请参考以下文章

如何在 python 中最好地调整带有时区的时间戳?

如何按范围对csv文件中的列进行分组并使用python绘制直方图?

带有 GAWK 的 CSV 文件中的 Epoch 时间戳

如何在python中对没有标题的大型csv信号文件进行分类?

Python 返回 5 位时间戳,这是啥?

如何根据unix中的时间戳对文件进行排序? [关闭]