[英]Sort Pandas dataframe column index by date
我想按列索引對 dataframe 進行排序。 問題是我的列是直接從我的 excel 導入的“日期”dd/mm/yyyy。 例如:
10/08/20 12/08/20 11/08/20
0 2.0 6.0 15.0
1 6.0 11.0 8.0
2 4.0 7.0 3.0
3 7.0 12.0 2.0
4 12.0 5.0 7.0
我想要的 output 是:
10/08/20 11/08/20 12/08/20
0 2.0 15.0 6.0
1 6.0 8.0 11.0
2 4.0 3.0 7.0
3 7.0 2.0 12.0
4 12.0 7.0 5.0
我在用
df.sort_index(axis=1)
它給了我以下錯誤:
TypeError: 'datetime.datetime' 和 'str' 的實例之間不支持'<'
我想在熊貓 dataframe 中做到這一點。 任何幫助將不勝感激。 謝謝
首先刪除“。” 在數據源表的日期結束時。 對於這個數據
10-08-2020 12-08-2020 11-08-2020
0 2 6 15
1 6 11 8
2 4 7 3
3 7 12 2
4 12 5 7
嘗試這個
import datetime as dt
df.columns=pd.Series(df.columns).apply(lambda d: dt.datetime(d, dt.datetime.strptime(d, '%d/%m/%Y')))
df.sort_index(axis = 1)
第一的:
df.columns = df.columns.str.replace(".", "")
然后:
df.sort_index(axis = 1)
更新:正如評論中提到的 Ch3steR。 用於刪除“。”
df.columns = df.columns.str.rstrip(".")
使用str.rstrip
進行概括,因為day.month.year
是有效格式,使用str.replace
將替換每個.
s = pd.Series(["1.2.2020."])
pd.to_datetime(s.str.replace('.', ''))
# 0 2020-12-20 # Interpeted wrong
# dtype: datetime64[ns]
pd.to_datetime(s.str.rstrip('.'))
# 0 2020-01-02
# dtype: datetime64[ns]
您的錯誤來自您將字符串類型與日期類型混合的事實。 您的所有列名都是字符串,或者都是日期,但您不能同時使用兩者。
例如
l=[[2.0, 6.0, 15.0],
[6.0, 11.0, 8.0],
[4.0, 7.0, 3.0],
[7.0, 12.0, 2.0],
[12.0, 5.0, 7.0]]
d = pd.DataFrame(l, columns =['10/08/20', '12/08/20', '11/08/20']) # column names are strings
產量
10/08/20 12/08/20 11/08/20
0 2.0 6.0 15.0
1 6.0 11.0 8.0
2 4.0 7.0 3.0
3 7.0 12.0 2.0
4 12.0 5.0 7.0
現在,如果我想按我輸入的列名排序
d.sort_index(axis = 1)
10/08/20 11/08/20 12/08/20
0 2.0 15.0 6.0
1 6.0 8.0 11.0
2 4.0 3.0 7.0
3 7.0 2.0 12.0
4 12.0 7.0 5.0
另一方面,如果列名是日期,如
from dateutil.parser import parse
d = pd.DataFrame(l, columns =[parse('10/08/20'), parse('12/08/20'), parse('11/08/20')])
我們將有
2020-10-08 2020-12-08 2020-11-08 #now column names are dates
0 2.0 6.0 15.0
1 6.0 11.0 8.0
2 4.0 7.0 3.0
3 7.0 12.0 2.0
4 12.0 5.0 7.0
同樣,您可以使用相同的方法對它們進行排序
details.sort_index(axis = 1)
2020-10-08 2020-11-08 2020-12-08
0 2.0 15.0 6.0
1 6.0 8.0 11.0
2 4.0 3.0 7.0
3 7.0 2.0 12.0
4 12.0 7.0 5.0
並且不會給你任何錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.