簡體   English   中英

按日期對 Pandas dataframe 列索引進行排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM