根据包含日期的文本,按日期重新排列一列字符串

时间:2019-06-20 20:13:05

标签: python pandas python-2.7 dataframe

我希望按日期排列数据框,但是,日期是每一行中字符串的一部分。必须按天顺序重新排列行。

来自堆栈溢出的其他解决方案显示了如何仅基于日期列进行排序,此示例有所不同,因为其他信息是每个字符串的一部分,并且与日期混合在一起。

数据框是具有索引的一列,但是行的排列顺序不是从每个字符串的最右边的日期开始。 分数是随机的,不需要任何注意。

                        0
__________________________
0     score17 6-20-19.xlsx
1     score23 6-7-19.xlsx
2     score4  6-17-19.xlsx      
3     score34 6-8-19.xlsx
4     score10 6-7-19.xlsx

预期的数据框应如下所示(重复的日期对彼此之间的顺序没有偏好,索引也没有关系)。各个分数必须与它们的关联日期保持一致。

                         0
__________________________
1     score23 6-7-19.xlsx
4     score10 6-7-19.xlsx
3     score34 6-8-19.xlsx
2     score4  6-17-19.xlsx
0     score17 6-20-19.xlsx

这是什么方法?

1 个答案:

答案 0 :(得分:0)

一种使用普通字符串表达式创建一些列,然后进行相应排序的粗略方法。

首先,我建议您对列进行“剥离”以确保前导/滞后空格不是问题,例如示例非标准间距。

df['column_name'] = df['column_name'].str.strip()

然后您可以像这样在第一个“空格”('')处拆分列,请注意,这将创建两列:

df[['score', 'date']] = df['column_name'].str.split(' ', n=1, expand=True)

然后您可以在句点('。')分隔“日期”列,以摆脱扩展名:

df['date'] = df['date'].str.split('.', expand = True)

然后将“日期”列转换为日期时间:

df['date'] = df['date'].astype('datetime64[ns]')

现在,您可以根据此“日期”列对数据框进行排序,并根据所需格式将ascending设置为True / False。

df.sort_values(by='date', ascending = False)