我想按列索引对数据框进行排序。问题是我的列是直接从我的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
我想要的输出是:
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'
我想在熊猫数据框中执行此操作。任何帮助将不胜感激。谢谢
答案 0 :(得分:2)
首先删除'。数据表中日期的结尾。 此数据的
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)
答案 1 :(得分: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]
答案 2 :(得分:0)
您的错误来自以下事实:您将字符串类型与日期类型混合在一起。您所有的列名都是字符串,或者都是日期,但是不能混在一起。
例如
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
并且不会给您任何错误。