【问题标题】:Pandas - Column sorting changesPandas - 列排序更改
【发布时间】:2019-04-02 08:57:23
【问题描述】:

我正在尝试将一组 csv 文件合并到一个 Dataframe 中。在此过程中,我创建了一个名为 Time_Created 的新列,我试图将其作为 Dataframe 的第一列。

df_v1 = pd.concat([pd.read_csv(f) for f in updatedfiles_1], sort=True)
cols = df_v1.columns.tolist()
print(cols) 
cols.insert(0, cols.pop(cols.index('Time_Created')))
print(cols) <-- This shows the columns as expected
df_v1.to_csv('file.csv')

我看到在保存到 csv 之前打印列时,列会根据需要进行修改,但是当我打开保存的 csv 时,列排序会发生变化。

下面给出的是源中的列序列:

Name,Price,Quanity,Time_Created

我要排序的序列:

Time_Created,Name,Price,Quanity

谁能指导我为什么输出文件会更改列排序。谢谢。

【问题讨论】:

  • 修改cols后是否尝试设置df_v1.columns = cols

标签: python-3.x pandas columnsorting


【解决方案1】:

尝试使用df_v1[['Time_Created', 'Name', 'Price', 'Quanity']].to_csv(...)

【讨论】:

  • 我有一个问题,那就是列不固定。每次数据框中的列集都会有所不同,但只有“Time_Created”列是不变的,因此尝试这种方法..
【解决方案2】:

我相信你很接近。您实际上从未将数据框的列设置为修改后的顺序。你可以做这样的事情,它应该可以工作。

df_v1 = pd.concat([pd.read_csv(f) for f in updatedfiles_1], 
                  sort=True)
cols = df_v1.columns.tolist()
print(cols) 
cols.insert(0, cols.pop(cols.index('Time_Created')))
print(cols) <-- This shows the columns as expected
df_v1[cols].to_csv('file.csv')  <-Here you tell it to send df_v1 in [cols] order

如果最后一个print(cols) 是您想要的顺序,那么您可以在将df_v1 发送到_csv 时使用它。

【讨论】:

    猜你喜欢
    • 2011-02-13
    • 1970-01-01
    • 2019-01-08
    • 2015-04-03
    • 2020-07-11
    • 2017-03-06
    • 2019-02-22
    • 1970-01-01
    • 2012-09-02
    相关资源
    最近更新 更多