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

标签 python csv sorting datetime timestamp

我正在尝试按给定的时间戳对 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)

但是它总是抛出错误: 时间数据“2021-04-16 12:59:26+02:00”与格式“%Y-%m-%d %H:%M:%S%z”不匹配

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

如有任何帮助,我们将不胜感激。

最佳答案

如果您将 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'])

关于python - 使用 Python 对 CSV 文件中的时间戳进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67297113/

相关文章:

python - 在 pandas 中,如何读取列中包含列表的 csv 文件?

python - 对嵌套字典python 2.7进行排序,按最深值,返回键元组

python - 需要帮助按键对对象列表进行排序

python - Opencv 无法识别 USB 摄像头

python - 如何使用循环从多个 pandas 数据框中删除一列?

使用 Nestjs 和 Papa Parse 处理 CSV 文件

Python 列出并对随机生成的数字进行排序

python - PuLP 生成可通过命令行 CBC 求解的 LP 文件,但 PuLP 报告未定义的解决方案

python - 在 pandas DataFrame 中每组选择 1 个 True,1 个 False

python - 读取列值中带有分隔符的 CSV