pandas 你能阻止 df.append() 的自动字母顺序吗?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/27749276/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-13 22:48:20  来源:igfitidea点击:

Can you prevent automatic alphabetical order of df.append()?

pandasappendalphabetical

提问by Alexis Perez

I am trying to append data to a log where the order of columns isn't in alphabetical order but makes logical sense, ex.

我试图将数据附加到日志中,其中列的顺序不是按字母顺序排列,但具有逻辑意义,例如。

Org_Goals_1  Calc_Goals_1  Diff_Goals_1   Org_Goals_2 Calc_Goals_2 Diff_Goals_2 

I am running through several calculations based on different variables and logging the results through appending a dictionary of the values after each run. Is there a way to prevent the df.append() function to order the columns alphabetically?

我正在运行基于不同变量的多个计算,并通过在每次运行后附加值字典来记录结果。有没有办法阻止 df.append() 函数按字母顺序排列列?

采纳答案by EdChum

Seems you have to reorder the columns after the append operation:

似乎您必须在追加操作后对列重新排序:

In [25]:
# assign the appended dfs to merged
merged = df1.append(df2)
# create a list of the columns in the order you desire
cols = list(df1) + list(df2)
# assign directly
merged.columns = cols
# column order is now as desired
merged.columns
Out[25]:
Index(['Org_Goals_1', 'Calc_Goals_1', 'Diff_Goals_1', 'Org_Goals_2', 'Calc_Goals_2', 'Diff_Goals_2'], dtype='object')

example:

例子:

In [26]:

df1 = pd.DataFrame(columns=['Org_Goals_1','Calc_Goals_1','Diff_Goals_1'], data = randn(5,3))
df2 = pd.DataFrame(columns=['Org_Goals_2','Calc_Goals_2','Diff_Goals_2'], data=randn(5,3))
merged = df1.append(df2)
cols = list(df1) + list(df2)
merged.columns = cols
merged
Out[26]:
   Org_Goals_1  Calc_Goals_1  Diff_Goals_1  Org_Goals_2  Calc_Goals_2  \
0     0.028935           NaN     -0.687143          NaN      1.528579   
1     0.943432           NaN     -2.055357          NaN     -0.720132   
2     0.035234           NaN      0.020756          NaN      1.556319   
3     1.447863           NaN      0.847496          NaN     -1.458852   
4     0.132337           NaN     -0.255578          NaN     -0.222660   
0          NaN      0.131085           NaN     0.850022           NaN   
1          NaN     -1.942110           NaN     0.672965           NaN   
2          NaN      0.944052           NaN     1.274509           NaN   
3          NaN     -1.796448           NaN     0.130338           NaN   
4          NaN      0.961545           NaN    -0.741825           NaN   

   Diff_Goals_2  
0           NaN  
1           NaN  
2           NaN  
3           NaN  
4           NaN  
0      0.727619  
1      0.022209  
2     -0.350757  
3      1.116637  
4      1.947526  

The same alpha sorting of the columns happens with concat also so it looks like you have to reorder after appending.

列的相同 alpha 排序也发生在 concat 中,因此看起来您必须在追加后重新排序。

EDIT

编辑

An alternative is to use join:

另一种方法是使用join

In [32]:

df1.join(df2)
Out[32]:
   Org_Goals_1  Calc_Goals_1  Diff_Goals_1  Org_Goals_2  Calc_Goals_2  \
0     0.163745      1.608398      0.876040     0.651063      0.371263   
1    -1.762973     -0.471050     -0.206376     1.323191      0.623045   
2     0.166269      1.021835     -0.119982     1.005159     -0.831738   
3    -0.400197      0.567782     -1.581803     0.417112      0.188023   
4    -1.443269     -0.001080      0.804195     0.480510     -0.660761   

   Diff_Goals_2  
0     -2.723280  
1      2.463258  
2      0.147251  
3      2.328377  
4     -0.248114  

回答by Alexis Perez

Actually, I found "advanced indexing" to work quite well

实际上,我发现“高级索引”效果很好

df2=df.ix[:,'order of columns']

回答by Maarten Klop

As I see it, the order is lost, but when appending, the original data should have the correct order. To maintain that, assuming Dataframe 'alldata' and dataframe to be appended data 'newdata', appending and keeping column order as in 'alldata' would be:

在我看来,顺序丢失了,但是在追加时,原始数据应该具有正确的顺序。为了保持这一点,假设 Dataframe 'alldata' 和 dataframe 被附加数据 'newdata',在 'alldata' 中附加和保持列顺序将是:

alldata.append(newdata)[list(alldata)]

(I encountered this problem with named date fields, where 'Month' would be sorted between 'Minute' and 'Second')

(我在命名日期字段中遇到了这个问题,其中“月”将在“分钟”和“秒”之间排序)