【问题标题】:Best way to sort by date/time in string format?以字符串格式按日期/时间排序的最佳方法?
【发布时间】:2021-06-13 00:58:11
【问题描述】:

所以我有这个代表自行车共享服务信息的字符串列表。特别是,每个字符串代表一辆自行车何时被卡车运到不同的站点。最后一项中的每个项目都表示如下:

"By_Truck   ('2019/06/09 15:21:06', 'W 43 St & 6 Ave', '2019/06/09 15:46:49', 'W 33 St & 7 Ave')"

我想做的是按时间顺序对列表进行排序。但是,我不确定最好的方法是什么。有人有什么建议吗?

【问题讨论】:

  • 每个条目都是tuple吗?
  • 请提供Python语法中的数据结构。那是什么ByTruck?一个字符串?变量名?
  • @trincot 它是一个字符串列表。我的粗体字是列表中的一个字符串。我将再次对其进行编辑以显示它的实际情况(我只是从打印中复制的)。
  • 可见该字符串包含像(start-move from-location end-move to-location) 这样的元组表示,您必须说明是否要按开始移动日期时间或结束移动时间排序;日期格式也是 yyyy/mm/dd 还是不太可能 yyyy/dd/mm ?如果字符串的开头始终是 By_Truck ( 并且您在 start-move 上进行排序,则只需对字符串进行排序而不考虑更多内容,因此 sorted(your-list-of-string) ... 很难更简单

标签: python python-3.x list sorting datetime


【解决方案1】:

您可以通过以下方式使用pandas 包:

import pandas as pd
By_Truck = ('2019/06/09 15:21:06', 'W 43 St & 6 Ave', '2019/06/09 15:46:49', 'W 33 St & 7 Ave')
# Create a DataFrame from the tuple ordered by pairs
df = pd.DataFrame(By_Truck[n:n + 2] for n, i in enumerate(By_Truck) if n % 2 == 0) 
# Set columns names
df.columns = ["date_time", "location"]
# Make type to datetime
df.date_time = pd.to_datetime(df.date_time)
df = df.set_index(["date_time"])
# Sort by index column
df = df.sort_index(axis=0,ascending=True)

结果是:

>>> df
                            location
date_time                           
2019-06-09 15:21:06  W 43 St & 6 Ave
2019-06-09 15:46:49  W 33 St & 7 Ave

【讨论】:

    【解决方案2】:

    似乎每个字符串都有格式

    "way   ('start-move-datetime', 'from-location', 'end-move-datetime', 'to-location')"
    

    如果字符串的开头始终是 By_Truck ("',后跟 start-move-datetime 并且您按 start-move-datetime 进行排序,则只需排序字符串而不考虑更多内容

    sorted_list = sorted(your_list)
    

    your_list.sort()
    

    取决于你是否想修改你的列表

    如果字符串的开头并不总是相同,并且您仍想按 start-move-datetime 进行排序,则可以这样做

    sorted(your_list, key=lambda _: _.split("'")[1])
    

    如果你想在 end-move-datetime 上排序,无论字符串是否以相同的标题开头,你都可以这样做

    sorted(your_list, key=lambda _: _.split("'")[-4])
    

    在所有情况下,我都认为日期格式为 yyyy/mm/dd

    >>> l = ["By_Truck   ('2019/06/09 15:21:06', 'W 43 St & 6 Ave', '2019/06/09 15:46:49', 'W 33 St & 7 Ave')", 
    ...      "By_Truck   ('2019/06/08 15:21:06', 'W 43 St & 6 Ave', '2019/06/89 15:46:49', 'W 33 St & 7 Ave')", 
    ...      "By_Truck   ('2019/06/19 15:21:06', 'W 43 St & 6 Ave', '2019/06/19 15:46:49', 'W 33 St & 7 Ave')"]
    >>> 
    >>> sorted(l)
    ["By_Truck   ('2019/06/08 15:21:06', 'W 43 St & 6 Ave', '2019/06/89 15:46:49', 'W 33 St & 7 Ave')", "By_Truck   ('2019/06/09 15:21:06', 'W 43 St & 6 Ave', '2019/06/09 15:46:49', 'W 33 St & 7 Ave')", "By_Truck   ('2019/06/19 15:21:06', 'W 43 St & 6 Ave', '2019/06/19 15:46:49', 'W 33 St & 7 Ave')"]
    >>> 
    >>> l = ["By_Truck   ('2019/06/09 15:21:06', 'W 43 St & 6 Ave', '2019/06/09 15:46:49', 'W 33 St & 7 Ave')", 
    ...      "By_Car   ('2019/06/08 15:21:06', 'W 43 St & 6 Ave', '2019/06/08 15:46:49', 'W 33 St & 7 Ave')", 
    ...      "By_Bicycle   ('2019/06/01 15:21:06', 'W 43 St & 6 Ave', '2019/06/19 15:46:49', 'W 33 St & 7 Ave')"]
    >>> 
    >>> sorted(l, key=lambda _: _.split("'")[1])
    ["By_Bicycle   ('2019/06/01 15:21:06', 'W 43 St & 6 Ave', '2019/06/19 15:46:49', 'W 33 St & 7 Ave')", "By_Car   ('2019/06/08 15:21:06', 'W 43 St & 6 Ave', '2019/06/08 15:46:49', 'W 33 St & 7 Ave')", "By_Truck   ('2019/06/09 15:21:06', 'W 43 St & 6 Ave', '2019/06/09 15:46:49', 'W 33 St & 7 Ave')"]
    >>> 
    >>> sorted(l, key=lambda _: _.split("'")[-4])
    ["By_Car   ('2019/06/08 15:21:06', 'W 43 St & 6 Ave', '2019/06/08 15:46:49', 'W 33 St & 7 Ave')", "By_Truck   ('2019/06/09 15:21:06', 'W 43 St & 6 Ave', '2019/06/09 15:46:49', 'W 33 St & 7 Ave')", "By_Bicycle   ('2019/06/01 15:21:06', 'W 43 St & 6 Ave', '2019/06/19 15:46:49', 'W 33 St & 7 Ave')"]
    >>> 
    

    【讨论】:

      猜你喜欢
      • 2012-03-19
      • 2023-01-13
      • 2011-08-28
      • 2016-11-23
      • 1970-01-01
      • 2019-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多