【发布时间】:2017-08-08 16:53:34
【问题描述】:
我有一个 pandas 日期时间序列列(字符串格式),我想按时间顺序排序。由于原始系列已转换为 YYYY-MM-DD 时间戳格式,如下所示:
0 1993-03-25
1 1985-06-18
2 1971-07-08
3 1975-09-27
4 2000-02-06
5 1979-07-06
6 1978-05-18
7 1989-10-24
8 1989-10-24
9 1971-04-10
10 1985-05-11
11 2011-04-09
12 1998-08-01
13 1972-01-26
14 1990-05-24
注意:这只是一小部分数据,仅供参考
我想按时间顺序对它们进行排序,精确到“日”(年 --> 月 --> 日),并按它们在原始系列中的索引对它们进行排序,其中新索引列在左侧,而每个日期时间字符串的原始(排序)索引根据它们的时间顺序排列在右侧:
0 10
1 7
2 1
3 3
4 12
5 5
6 4
7 8
8 8
9 0
10 6
11 13
12 11
13 2
14 9
但是,请注意有些情况下日期时间字符串是绑定的,例如,df[7] 和 df[8] 是同一天,因此获得相同的排名 8。
我已经使用.rank(method='dense').sub(1).astype(int) 和.sort_values(kind='mergesort') 之类的方法按年月日顺序对这个日期时间序列进行排序,但似乎无法摆脱“捆绑”问题。
有没有更好的方法来解决这个并列排名问题并获得我想要的输出?
谢谢。
新编辑
我使用以下代码生成df,.txt文件包含大量无组织的文本字符串,我使用re.findall(r'')函数从中提取日期时间元素。
import pandas as pd
import re
import datetime
#load text string
doc = []
with open('dates.txt') as file:
for line in file:
doc.append(line)
df = pd.Series(doc)
# extract datetimes from different datetime patterns, the extracted datetime elements are in string format contained in list [] object
df['date'] = df.str.findall(r'\b....\b')
# manually replace some irregular patterns/expressions
df['date'].iloc[...] = ['10/21/79']
df['date'].iloc[...] = ['7/11/2000']
...
df['date'].drop('date', inplace=True)
# convert list object in each cell to string
df['date'] = df['date'].apply(lambda x: ', '.join(x))
# convert to datetime format and check for NaT cell.
df['date'] = df['date'].apply(lambda x: pd.to_datetime(x, errors='coerce'))
【问题讨论】:
-
您的日期实际上是日期时间,还是格式不错的字符串?
-
它们是字符串。我将在线程上编辑此信息。
-
如果它们在 YYYY-MM-DD 中,你不能按字典顺序排序吗?
-
如何按字典顺序对它们进行排序?如果有人能就此启发我,将不胜感激。
标签: python sorting datetime series rank