Pandas 从dict创建数据帧&;索引顺序?

Pandas 从dict创建数据帧&;索引顺序?,pandas,dictionary,python-3.7,Pandas,Dictionary,Python 3.7,我正在使用Python 3.7.1和pandas 0.23.4中最近下载的Anaconda 报告说: 当数据是dict,且未传递索引时,序列索引将按dict的插入顺序排序 我从没有传递索引的dict实例化了一个数据帧: newspapers = {'Jim':{'Mon':15,'Tue':17,'Wed':21,'Thu':16,'Fri':19},\ 'Tony':{'Mon':8,'Tue':15,'Wed':11,'Thu':16,'Fri':13}, \ 'Coli

我正在使用Python 3.7.1和pandas 0.23.4中最近下载的Anaconda

报告说:

当数据是dict,且未传递索引时,序列索引将按dict的插入顺序排序

我从没有传递索引的dict实例化了一个数据帧:

newspapers = {'Jim':{'Mon':15,'Tue':17,'Wed':21,'Thu':16,'Fri':19},\
     'Tony':{'Mon':8,'Tue':15,'Wed':11,'Thu':16,'Fri':13}, \
     'Colin':{'Mon':13,'Tue':17,'Wed':19,'Thu':17,'Fri':20} \
    }
newspapers_df = pd.DataFrame(newspapers)
为什么不按插入顺序显示,周一、周二、周三、周四、周五

print(newspapers_df)
产出:

      Jim  Tony  Colin
Fri   19    13     20
Mon   15     8     13
Thu   16    16     17
Tue   17    15     17
Wed   21    11     19

对于我在python 3.5中工作的人来说,0.24.2在字典理解中创建
Series
,并传递给
DataFrame
构造函数,这似乎是一个bug:

newspapers_df = pd.DataFrame({k:pd.Series(v) for k, v in newspapers.items()})

print (newspapers_df)
     Jim  Tony  Colin
Mon   15     8     13
Tue   17    15     17
Wed   21    11     19
Thu   16    16     17
Fri   19    13     20

可能的数据解决方案-或
有序分类索引

newspapers_df = pd.DataFrame(newspapers)

L = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri']
newspapers_df = newspapers_df.reindex(L)
或:


看起来pd.Series和pd.DataFrame有不同的处理方法

我有类似的python环境,结果可以在我的计算机中复制。此外,杰兹雷尔的pd系列案例也可以在我的电脑中复制

我检查了手册,发现两个结果都符合文件要求

对于系列,键是索引 如果使用Python版本>=3.6且Pandas版本>=0.23,则当数据是dict且未传递索引时,系列索引将按照dict的插入顺序进行排序

对于dataframe:键是column。 如果未通过轴标签,则将根据常识规则从输入数据构建轴标签

注意:当数据是dict且未指定列时,如果使用Python版本>=3.6且>=0.23,则数据帧列将按dict的插入顺序排序

这意味着,若要确保列和索引都进行排序,可能需要传递索引或稍后对它们进行排序


希望它能回答您的问题。

同样的排序也可以使用:


您的pandas版本是什么?因为此行为是针对特定版本引入的。您应该在上面提出错误,因为它更适合v0.23.4的更新帖子。我不确定我是否发现了一个bug,我想我遗漏了一些东西。对我来说,这看起来像是一个bug,我会发布一个问题,因为它应该可以工作。老实说,我认为我不需要。对我来说,这是一个错误,有很多解决办法,但真正的问题是,为什么不这样做呢?是的,排序,传递索引都很好,谢谢,但这不是问题所在question@boardtc-是的,第一段有效吗?我认为只有外部条件是正确的过程,而不是更深的过程。报纸在你的第一段打印了你给我看的。我可以在熊猫dev guthub上养一只虫子。答案是熊猫身上有一只虫子!
newspapers_df.index = pd.CategoricalIndex(newspapers_df.index, ordered=True, categories=L)
newspapers_df = newspapers_df.sort_index()
print (newspapers_df)
     Jim  Tony  Colin
Mon   15     8     13
Tue   17    15     17
Wed   21    11     19
Thu   16    16     17
Fri   19    13     20
days_dict = {'Mon':0, 'Tue':1,'Wed':2,'Thu':3,'Fri':4,'Sat':5,'Sun':6}
df = pd.DataFrame(newspapers).reset_index()
df.iloc[np.argsort(df['index'].map(days_dict)),:]