pd.to_datetime订购错误的月份

时间:2018-11-21 10:47:25

标签: python pandas

我正在使用熊猫读取.csv文件。我想按月分析此文件的数据。最初,前5行如下所示:

  date      value
01.04.2017  208.04
01.04.2017  81
01.04.2017  280
01.04.2017  403.08
01.04.2017  71.1

所以我用:

df1['date']=pd.to_datetime(df1['date'], format='%d.%m.%Y')
df1['month']=df1['date'].dt.strftime('%B')

但是,当我查看新的月份列时,会得到以下信息:

print(df1['month'].unique())
>>['April' 'May' 'June' 'July' 'August' 'September' 'January' 'October'
 'November' 'December' 'February' 'March']

一月是九月之后,尽管在原始.csv中日期已正确排序。是否有人有解决此问题的想法,或者问题出在哪里?预先谢谢你!

P.S。我使用以下命令导入文件:

df1=pd.read_csv("GF2017_2018.csv", delimiter=';',dtype=str, index_col=False, encoding='latin-1')

2 个答案:

答案 0 :(得分:1)

pandas.Series.unique的文档中所述,唯一性是按出现顺序返回的,似乎您所做的任何事情都不会改变数据的顺序。我会仔细检查数据中月份的实际顺序。

答案 1 :(得分:0)

我认为您可以对日期时间进行排序,因为您的日期时间顺序错误。

df1['date']=pd.to_datetime(df1['date'], format='%d.%m.%Y')
df1 = df1.sort_values('date')

df1['month']=df1['date'].dt.strftime('%B')

如果需要正确排序,另一种解决方案是将飞蛾转换为ordered categoricals

months = ['January','February','March','April','May','June','July','August',
          'September','October','November','December']

df1['month'] = pd.Categorical(df1['date'].dt.strftime('%B'), ordered=True, categories=months)
df1 = df1.sort_values('date')