Python 以日期作为列标题对数据框进行排序
我的日期必须以水年为单位,我想找到一种方法,让专栏以日期09/30/1899_24:00开始,以日期9/30/1999_24:00结束 起初,我像下面这张图片一样,但当我做数据帧透视时,它把顺序搞乱了。 这是我的代码片段Python 以日期作为列标题对数据框进行排序,python,pandas,sorting,date,header,Python,Pandas,Sorting,Date,Header,我的日期必须以水年为单位,我想找到一种方法,让专栏以日期09/30/1899_24:00开始,以日期9/30/1999_24:00结束 起初,我像下面这张图片一样,但当我做数据帧透视时,它把顺序搞乱了。 这是我的代码片段 sim = pd.read_csv(headout,parse_dates=True, index_col='date') sim['Layer'] = sim.groupby('date').cumcount() + 1 sim['Layer']
sim = pd.read_csv(headout,parse_dates=True, index_col='date')
sim['Layer'] = sim.groupby('date').cumcount() + 1
sim['Layer'] = 'L' + sim['Layer'].astype(str)
sim = sim.pivot(index = None , columns = 'Layer').T
sim = sim.reset_index()
sim = sim.rename(columns={"level_0": "NodeID"})
sim["NodeID"]= sim['NodeID'].astype('int64')
sim['gse'] = sim['NodeID'].map(sta.set_index(['NodeID'])['GSE'])
问题是24:00不是有效时间
如果不将date列转换为有效的datetime,python会将该列视为字符串。
这将使执行任何类型的基于时间的分析变得非常困难
列的顺序将按如下数字顺序排列:“09/30/1899_24:00”、“10/31/1899_24:00”、“11/30/1898_24:00”、“11/30/1899_24:00”
注意,1898年11月30日是在1899年11月30日之前
将24:00改为23:59
作为pd进口熊猫
数据帧
df=pd.数据帧{'date':['09/30/1899_24:00','09/30/1899_24:00','09/30/1899_24:00','09/30/1899_24:00','10/31/1899_24:00',
'10/31/1899_24:00', '10/31/1899_24:00', '10/31/1899_24:00', '11/30/1899_24:00', '11/30/1899_24:00']}
||日期|
|--:|:---------|
| 0 | 09/30/1899_24:00 |
| 1 | 09/30/1899_24:00 |
| 2 | 09/30/1899_24:00 |
| 3 | 09/30/1899_24:00 |
| 4 | 10/31/1899_24:00 |
| 5 | 10/31/1899_24:00 |
| 6 | 10/31/1899_24:00 |
| 7 | 10/31/1899_24:00 |
| 8 | 11/30/1899_24:00 |
| 9 | 11/30/1899_24:00 |
24:00更换
df.date=df.date.str.replace'24:00','23:59'
格式化为日期时间
df.date=pd.to_datetimedf.date,格式='%m/%d/%Y\u%H:%m'
最终的
日期
0 1899-09-30 23:59:00
1 1899-09-30 23:59:00
2 1899-09-30 23:59:00
3 1899-09-30 23:59:00
4 1899-10-31 23:59:00
5 1899-10-31 23:59:00
6 1899-10-31 23:59:00
7 1899-10-31 23:59:00
8 1899-11-30 23:59:00
9 1899-11-30 23:59:00
删除所有时间组件
df.date=df.date.str.replace“24:00”,
df.date=pd.to_datetimedf.date,格式='%m/%d/%Y'
日期
0 1899-09-30
1 1899-09-30
2 1899-09-30
3 1899-09-30
4 1899-10-31
5 1899-10-31
6 1899-10-31
7 1899-10-31
8 1899-11-30
9 1899-11-30
尝试df[df.columns.tolist[:-1]]不起作用,我得到1900年1月31日作为第一个日期