熊猫:to_csv附加模式,保留列顺序

时间:2018-08-02 08:01:59

标签: pandas

我正在使用:

df.to_csv('file.csv', header=False, mode='a')

将多个熊猫数据帧一个接一个地写入CSV文件。

我确保这些数据框具有相同的列名集。

但是,似乎列顺序将以随机顺序写入,所以我的CSV文件混乱。

如何确保新数据帧将按照先前数据的列顺序写入?

非常感谢

1 个答案:

答案 0 :(得分:0)

我认为,如果每个DataFrame的列名相同,则可以按列进行排序:

df.sort_index(axis=1).to_csv('file.csv', header=None, mode='a')

如果可能的话,可以使用不同的列名称来创建帮助程序变量c并添加新列并删除重复项:

df1 = pd.DataFrame({'C':list('as'),
                   'B':[4,5],
                   'A':[7,8]})

df2 = pd.DataFrame({'D':list('as'),
                   'A':[4,5],
                   'C':[7,8]})

df3 = pd.DataFrame({'C':list('as'),
                   'B':[4,5],
                   'E':[7,8]})

c = df1.columns

#first df should be written to file same way as another df
df1.to_csv('file.csv', header=None, index=False)

c = c.append(df2.columns).drop_duplicates()
df2.reindex(columns=c).to_csv('file.csv', header=None, mode='a', index=False)

c = c.append(df3.columns).drop_duplicates()
df3.reindex(columns=c).to_csv('file.csv', header=None, mode='a', index=False)

df = pd.read_csv('file.csv', header=None, names=c)
print (df)
   C    B    A    D    E
0  a  4.0  7.0  NaN  NaN
1  s  5.0  8.0  NaN  NaN
2  7  NaN  4.0    a  NaN
3  8  NaN  5.0    s  NaN
4  a  4.0  NaN  NaN  7.0
5  s  5.0  NaN  NaN  8.0