按d排序csv列

2024-09-27 07:31:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类似的清单

Date,dataA,dataB,dataC,dataD,dataE
1/1/2013,45.817,0.000,0.352,5.880,39.585
2/1/2013,21.154,0.000,0.348,6.562,14.244
3/1/2013,16.901,0.000,0.344,4.765,11.792
4/1/2013,54.324,1.051,7.597,10.896,34.780
5/1/2013,45.223,1.483,0.379,7.602,35.759
6/1/2013,25.140,1.336,0.402,5.678,17.724
...

一直到2013年12月31日。在

这是我的代码:

^{pr2}$

输出:

01/01/13
13/01/13
14/01/13
15/01/13
16/01/13
17/01/13
18/01/13
19/01/13
20/01/13
21/01/13
22/01/13
23/01/13
24/01/13
25/01/13
26/01/13
27/01/13
28/01/13
29/01/13
30/01/13
31/01/13
02/01/13
03/01/13
04/01/13
05/01/13
06/01/13
07/01/13
08/01/13
09/01/13
10/01/13
11/01/13
12/01/13

我的问题是如何对列表进行排序以使其按顺序排列(01/01/2013,02/01/2013…),或者在将其附加到列表之前对其进行排序?在

我想要的是使用数据(列之一)为一个选定的月份(例如一月/二月…)创建一个图表。绘制数据而不进行排序会令人困惑。在


Tags: 数据代码列表date排序图表绘制月份
2条回答

Sorting of lists accepts a ^{} parameter指定如何对列表中的项进行排序。唯一的挑战是你的是基于一个日期而不是一个简单的比较。在

firstItemDate = lambda x:date(*map(int,(x.split(",",1)[0].split("/"))[::-1]))
print sorted(data[1:],key=firstItemDate)

firstItemDate可以按如下方式分解:

  • ^{}-一个接受参数的匿名函数(数组的每一行)
  • date(-创建一个datetime.date对象(这需要3个参数)
  • *-unpack the argument listdate函数中
  • map(int,(-^{}一个函数,在本例中,^{}转换为一个列表
  • x.split(",",1)[0]-^{}这一行由逗号组成(作为一个csv),取0th元素-根据Jons的评论,我们可以将其限制为1个拆分,因为我们只处理第一列。在
  • .split("/")-^{}/上的0th元素作为其日期
  • )[::-1]))-使用数组切片来反转列表,因此它是年、月、日

因为日期对象定义了它们的排序方式,这将确保日期有效并正确排序。在

为了简洁起见,如果您再也不打算使用firstItemDate函数,可以将其插入sorted调用中,如下所示:

^{pr2}$

你可以很容易地用熊猫来做:

import pandas as pd

header = data.pop(0)
df = pd.DataFrame(data, columns=header)
print df.sort('Date')

输出:

^{pr2}$

相关问题 更多 >

    热门问题