Pandas按正确顺序创建具有列的DataFrame。

3

我试图通过将列名传递给构造函数来创建正确顺序的DataFrame:

df = pd.DataFrame(columns={
    'seg1_count', 'seg1_mean', 'seg1_std', 'seg1_min', 'seg1_25%', 'seg1_50%',
    'seg1_75%', 'seg1_max',
    'seg2_count', 'seg2_mean', 'seg2_std', 'seg2_min', 'seg2_25%', 'seg2_50%',
    'seg2_75%', 'seg2_max',
    'seg3_count', 'seg3_mean', 'seg3_std', 'seg3_min', 'seg3_25%', 'seg3_50%',
    'seg3_75%', 'seg3_max',
    'seg4_count', 'seg4_mean', 'seg4_std', 'seg4_min', 'seg4_25%', 'seg4_50%',
    'seg4_75%', 'seg4_max'
})

但是列的顺序看起来混乱了df.columns

Index(['seg4_min', 'seg1_max', 'seg3_std', 'seg3_max', 'seg1_std',
       'seg2_count', 'seg1_25%', 'seg3_75%', 'seg2_mean', 'seg2_50%',
       'seg4_count', 'seg3_50%', 'seg1_50%', 'seg2_min', 'seg1_count',
       'seg2_max', 'seg2_75%', 'seg4_25%', 'seg2_25%', 'seg1_min', 'seg4_50%',
       'seg1_mean', 'seg3_count', 'seg4_mean', 'seg4_max', 'seg3_mean',
       'seg3_25%', 'seg3_min', 'seg4_std', 'seg1_75%', 'seg4_75%', 'seg2_std'],
      dtype='object')

我的代码有什么问题?

1个回答

3
这是因为您将列名作为set传递,而集合是无序的。将其更改为列表,您应该能够保留顺序:
df = pd.DataFrame(columns = ['seg1_count', 'seg1_mean', 'seg1_std', 'seg1_min', 'seg1_25%', 'seg1_50%', 'seg1_75%', 'seg1_max',
              'seg2_count', 'seg2_mean', 'seg2_std', 'seg2_min', 'seg2_25%', 'seg2_50%', 'seg2_75%', 'seg2_max',
              'seg3_count', 'seg3_mean', 'seg3_std', 'seg3_min', 'seg3_25%', 'seg3_50%', 'seg3_75%', 'seg3_max',
              'seg4_count', 'seg4_mean', 'seg4_std', 'seg4_min', 'seg4_25%', 'seg4_50%', 'seg4_75%', 'seg4_max'])

更具体地说,DataFrame 的创建并没有保留顺序,当你创建集合时顺序是丢失的。
columns_set = {'seg1_count', 'seg1_mean', 'seg1_std', 'seg1_min', 'seg1_25%', 'seg1_50%', 'seg1_75%', 'seg1_max',
              'seg2_count', 'seg2_mean', 'seg2_std', 'seg2_min', 'seg2_25%', 'seg2_50%', 'seg2_75%', 'seg2_max',
              'seg3_count', 'seg3_mean', 'seg3_std', 'seg3_min', 'seg3_25%', 'seg3_50%', 'seg3_75%', 'seg3_max',
              'seg4_count', 'seg4_mean', 'seg4_std', 'seg4_min', 'seg4_25%', 'seg4_50%', 'seg4_75%', 'seg4_max'}
print(columns_set)

{'seg1_50%', 'seg2_count', 'seg4_25%', 'seg3_count', 'seg4_max', 'seg2_25%', 'seg3_min', 'seg4_count', 'seg2_std', 'seg4_75%', 'seg3_std', 'seg1_mean', 'seg2_50%', 'seg3_25%', 'seg1_75%', 'seg3_mean', 'seg1_max', 'seg3_75%', 'seg2_max', 'seg1_min', 'seg3_max', 'seg4_50%', 'seg2_75%', 'seg2_min', 'seg1_count', 'seg4_mean', 'seg3_50%', 'seg1_std', 'seg4_min', 'seg1_25%', 'seg2_mean', 'seg4_std'}

columns_list = ['seg1_count', 'seg1_mean', 'seg1_std', 'seg1_min', 'seg1_25%', 'seg1_50%', 'seg1_75%', 'seg1_max',
              'seg2_count', 'seg2_mean', 'seg2_std', 'seg2_min', 'seg2_25%', 'seg2_50%', 'seg2_75%', 'seg2_max',
              'seg3_count', 'seg3_mean', 'seg3_std', 'seg3_min', 'seg3_25%', 'seg3_50%', 'seg3_75%', 'seg3_max',
              'seg4_count', 'seg4_mean', 'seg4_std', 'seg4_min', 'seg4_25%', 'seg4_50%', 'seg4_75%', 'seg4_max']
print(columns_list)

['seg1_count', 'seg1_mean', 'seg1_std', 'seg1_min', 'seg1_25%', 'seg1_50%', 'seg1_75%', 'seg1_max', 'seg2_count', 'seg2_mean', 'seg2_std', 'seg2_min', 'seg2_25%', 'seg2_50%', 'seg2_75%', 'seg2_max', 'seg3_count', 'seg3_mean', 'seg3_std', 'seg3_min', 'seg3_25%', 'seg3_50%', 'seg3_75%', 'seg3_max', 'seg4_count', 'seg4_mean', 'seg4_std', 'seg4_min', 'seg4_25%', 'seg4_50%', 'seg4_75%', 'seg4_max']

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接