如何阻止Pandas对DataFrame列按字母排序并保持指定列顺序
解决Pandas导出CSV列顺序不符的问题
这个问题其实是因为早期Python版本里的普通字典是无序的,当你用它创建DataFrame时,pandas会按照字典键的哈希顺序(而非你编写的顺序)排列列,最终导致导出的CSV列序和预期不符。即使是Python 3.7+(字典默认有序),有时候也会因为某些场景出现列序混乱,这里给你几个稳妥的解决办法:
方法1:使用有序字典(OrderedDict)
通过collections.OrderedDict来定义数据,它会严格保留你编写的键顺序,这样创建的DataFrame列序就完全符合预期:
import pandas as pd from collections import OrderedDict holders = pd.DataFrame(OrderedDict({ "Rank": rank, "Address": address, "Quantity": quantity, "Percentage": percent })) holders.to_csv('holders.csv', index=False, encoding='utf-8')
方法2:创建DataFrame时显式指定列顺序
直接在pd.DataFrame()中通过columns参数强制指定列的排列顺序,不管字典本身的顺序如何,DataFrame都会按照你给定的顺序生成列:
import pandas as pd holders = pd.DataFrame({ "Rank": rank, "Address": address, "Quantity": quantity, "Percentage": percent }, columns=["Rank", "Address", "Quantity", "Percentage"]) holders.to_csv('holders.csv', index=False, encoding='utf-8')
方法3:导出CSV时指定列顺序
如果不想修改DataFrame的创建逻辑,也可以在to_csv()方法中通过columns参数指定导出的列顺序,这样即使DataFrame内部列序不对,导出的CSV也会按要求排列:
import pandas as pd holders = pd.DataFrame({ "Rank": rank, "Address": address, "Quantity": quantity, "Percentage": percent }) holders.to_csv('holders.csv', index=False, encoding='utf-8', columns=["Rank", "Address", "Quantity", "Percentage"])
个人更推荐方法2或3,它们不需要额外导入模块,而且在不同Python版本中都能稳定生效,避免版本兼容问题。
内容的提问来源于stack exchange,提问作者user9701233
相关产品推荐
相关产品推荐

