Python Pandas Dataframe 数据表按照每列日期字段名称先后进行排序

有一个数据表格,每一列的名称(字段)是不同的日期,但是原始数据日期是乱的,没有按照日期的从早到晚正常排列。由于数量很大,要是手工一个个重新排序太麻烦了,就想到了用pandas内置的排序功能,经过CSDN网上查找,发现对数据可以按行或列进行排序,代码非常简单:

DataFrame.sort_index(axis=1, ascending=True, inplace=True)
#axis=1按列名排序,如果是要按行排序就是axis=0. ascending=True是增序,从小到大,如果是从大到小逆序,则ascending=Flase

于是使用上述方法生成代码如下:

#日期排序有问题的代码
import pandas as pd
#打开csv格式的数据文件
data=pd.read_csv('数据汇总表.csv',encoding='UTF-8')
#按照列名从小到大排序
data.sort_index(axis=1,ascending=True, inplace=True)
#查看排序后的前5行数据是否正常
print(pd1.head(5))
#将排序好的文件保存为新的csv文件
data.to_csv(path_or_buf='排序后汇总表.csv',encoding='UTF-8')

执行完程序后发现有点问题,程序并没有完全按照日期的先后顺序排序,说是没有完全,是因为有部分排序正确,有部分列日期却先后颠倒了,比如下面这个,2020-5-31排序错误,跑到了11月和2月中间。
Python Pandas Dataframe 数据表按照每列日期字段名称先后进行排序_第1张图片
经过网上查询资料和实际测试,发现需要把原始日期字符转换为Python的标准datetime日期数据,然后再执行pandas 的排序。

基本代码示例如下:

#日期排序正确的代码
import datetime #导入日期处理函数
import pandas as pd
df=pd.read_csv('数据汇总表.csv',header=0,encoding='utf-8',engine='python')  #在Jupyter Notebook里运行需要加engine='python'
col_names=df.columns.tolist()  #将列名转为列表
#使用datatime将日期字符(格式为"%Y-%m-%d")转换为标准的Python时间变量,然后再用.date()功能提取出日期,如果不加这个,生成的时间变量会包括时分秒,但是我并不需要,所以仅需要年月日,最后赋值给新的列表变量new_cols,
new_cols=[datetime.datetime.strptime(col, "%Y-%m-%d").date() for col in col_names]
#将df数据表的列名修改为新的标准日期列表
df.columns=new_cols
#重新对df进行排序,axis=1表示按照列名排序
df.sort_index(axis=1,ascending=True, inplace=True) 
#保存排序后的文件,不用保存行索引序号
df.to_csv('排序后数据.csv',encoding='UTF-8', mode='w', index=None,index_label=None)

经过日期标准化后重新对数据表的列名进行排序,完美的解决了问题。

Python Pandas Dataframe 数据表按照每列日期字段名称先后进行排序_第2张图片

你可能感兴趣的:(Python,数据分析,python,pandas,数据分析)