我有一个从 CSV 加载的列,但是它们是按 CSV 带来的顺序而不是按日历顺序加载的(我的数据源也不按日历顺序对日期进行排序)。
Fecha Pais count
0 2017-06-01 Argentina 1
1 2017-06-01 China 31230
2 2017-06-01 Ecuador 1
3 2017-06-01 Egypt 2
4 2017-06-01 Latvia 360
5 2017-06-01 Portugal 1
6 2017-06-01 Slovak Republic 2
7 2017-06-01 Taiwan 2
8 2017-06-01 Ukraine 31
9 2017-06-01 United Kingdom 1
10 2017-06-02 Argentina 2
11 2017-06-02 Canada 1
12 2017-06-02 China 3980
13 2017-06-02 Slovak Republic 3
14 2017-06-02 Sweden 1
15 2017-06-02 Ukraine 99
16 2017-05-30 Argentina 1
17 2017-05-30 China 4022
18 2017-05-30 Ecuador 1
19 2017-05-30 France 16
20 2017-05-30 Germany 2
21 2017-05-30 Indonesia 1
22 2017-05-30 No Identificado 56
23 2017-05-30 Romania 1
24 2017-05-30 Russia 4
25 2017-05-30 Sweden 158
26 2017-05-30 Taiwan 1
27 2017-05-30 Ukraine 31
28 2017-05-30 Vietnam 18
29 2017-05-31 Argentina 3
30 2017-05-31 China 14477
31 2017-05-31 Czechia 35
32 2017-05-31 India 6
33 2017-05-31 Liberia 1
34 2017-05-31 No Identificado 1
35 2017-05-31 Republic of Korea 1
36 2017-05-31 Russia 1
37 2017-05-31 United States 3
如果我对数据源进行反向排序,文件将从 31、30、2 和 1 开始更改
无论哪种方式,按照数组(列)的顺序而不是日历顺序(30,31,1,2)绘制绘图,导致这个(31,30,2,1 或 1,2,30,31) .
如何按日历顺序对日期列进行排序?
我的代码:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.dates import DateFormatter, DayLocator, AutoDateLocator, AutoDateFormatter
df = pd.read_csv("72hcountcountry.csv", delimiter=',', parse_dates = ['Fecha','count'], dayfirst=True)
grupos = df.groupby(['Pais'])
print df
fig, ax = plt.subplots()
color=iter(cm.rainbow(np.linspace(0,1,len(grupos))))
for nombre, grupo in grupos:
ax.plot_date(x = grupo['Fecha'], y = grupo['count'], color = next(color), marker='o', ls = 'solid', label=nombre)
locator = DayLocator()
formatter = AutoDateFormatter(locator)
ax.xaxis.set_major_locator(locator)
ax.xaxis.set_major_formatter(formatter)
ax.autoscale_view()
ax.grid(True)
fig.autofmt_xdate()
ax.margins(0.05)
box = ax.get_position()
ax.set_position([box.x0, box.y0, box.width * 0.8, box.height])
ax.legend(loc='center left', bbox_to_anchor=(1, 0.5))
plt.show()
我认为问题在于“日期”列中的数据是对象类型
如果您将它们更改为类型 datatime 您应该能够按日期对它们进行排序
如果您检查数据框的类型,您将看到它现在是数据时间:
我只使用了几行并更改了日期,但现在对我来说没问题:
[m3_stackoverflow更新]
数组/列的顺序不会改变,顺序保持不变,并且在调用图形时,它会按照数组的顺序进行,而不是 SORT。
我用了
df = df.sort_values(["Fecha"])
剧情还是一样
如果我将数组中列的类型作为 DATE