Pandas:创建数据帧而不按字母顺序自动排序列名

时间:2016-10-04 21:28:21

标签: python pandas dataframe

我正在创建一个初始的pandas数据帧来存储从其他代码生成的结果:例如

result = pd.DataFrame({'date': datelist, 'total': [0]*len(datelist), 
                       'TT': [0]*len(datelist)})

datelist预定义列表。然后其他代码会为totalTT输出一些date的数字,我将存储在result数据框中。

所以我希望第一列为date,第二列为total,第三列为TT。但是,pandas会在创建时按字母顺序自动将其重新排序为TTdatetotal。虽然我之后可以再次手动重新排序,但我想知道是否有更简单的方法可以一步到位。

我想我也可以做

result = pd.DataFrame(np.transpose([datelist, [0]*l, [0]*l]),
                      columns = ['date', 'total', 'TT'])

但它在某种程度上看起来也很单调乏味。还有其他建议吗?

3 个答案:

答案 0 :(得分:12)

您可以将(正确排序的)列列表作为参数传递给构造函数或使用OrderedDict:

# option 1:
result = pd.DataFrame({'date': datelist, 'total': [0]*len(datelist), 
                   'TT': [0]*len(datelist)}, columns=['date', 'total', 'TT'])

# option 2:
od = collections.OrderedDict()
od['date'] = datelist
od['total'] = [0]*len(datelist)
od['TT'] = [0]*len(datelist)
result = pd.DataFrame(od)

答案 1 :(得分:2)

result = pd.DataFrame({'date': [23,24], 'total': 0,
                       'TT': 0},columns=['date','total','TT'])

答案 2 :(得分:1)

将pandas> = 0.23与Python结合使用> = 3.6。

<span style="color: blue;" title="square">◼</span>

当pandas v0.23.0与Python3.6结合使用时,

在从dict创建DataFrame(或Series)时保留dict的插入顺序。

请参阅https://pandas.pydata.org/pandas-docs/version/0.23.0/whatsnew.html#whatsnew-0230-api-breaking-dict-insertion-order

相关问题