2013-03-27 10 views
19

Есть ли способ сохранить порядок столбцов в CSV-файле при чтении и записи с Python Pandas? Например, в этом кодеСохранение порядка столбцов в Python Pandas DataFrame

import pandas as pd 

data = pd.read_csv(filename) 
data.to_csv(filename) 

выходные файлы могут отличаться, поскольку столбцы не сохраняются.

+0

Можете ли вы привести пример вашего CSV-файл? – waitingkuo

ответ

15

Там, кажется, ошибка в текущей версии Панды («0.11.0»), который означает, что ответ Матти Джона не будет работать. Если вы указываете столбцы для записи в файл, они записываются в алфавитном порядке, а просто перемаркированы в соответствии с списком в столбцах. Например, этот код:

import pandas 
dfdict={} 
dfdict["a"]=[1,2,3,4] 
dfdict["b"]=[5,6,7,8] 
dfdict["c"]=[9,10,11,12] 
df=pandas.DataFrame(dfdict) 
df.to_csv("dfTest.txt","\t",header=True,cols=["b","a","c"]) 

результаты в этом (неверный) вывод:

b a c 
0 1 5 9 
1 2 6 10 
2 3 7 11 
3 4 8 12 

Вы можете проверить, какая версия панд вы установили, выполнив:

pandas.version.version 

Документация to_csv is here

На самом деле, кажется, что это известная ошибка и будет исправлено в следующей версии (0.11.1):

https://github.com/pydata/pandas/issues/3489

UPDATE: Там до сих пор не был новый релиз панд, но есть обходной путь, описанный здесь, который не требует использования другая версия панд:

github.com/pydata/pandas/issues/3454

Так изменения последней строки в блоке кода выше следующего будет работать правильно:

df.to_csv("dfTest.txt","\t",header=True,cols=["b","a","c"], engine='python') 

UPDATE кажется, что аргумент «cols» был переименован в «столбцы» и что аргумент «engine» устарел (больше не доступен) в последних версиях pandas. Кроме того, эта ошибка исправлена ​​в версии 0.19.0.

+0

Попытка этого решения с помощью последних pandas (0.19.2) дает: 'TypeError: to_csv() получил неожиданный аргумент ключевого слова 'cols'' изменил API? – arielf

+0

считают, что этот вариант устарел, поскольку больше не нужен. – CnrL

+7

Кажется, он был переименован в 'columns'. Теперь для меня работает изменение столбцов 'cols' на' columns'. – arielf

11

Порядок чтения столбцов обычно должен сохраняться при чтении и затем записи файла csv, как это, но если по какой-либо причине они не в том порядке, в котором вы хотите, вы можете использовать аргумент ключевого слова в to_csv.

Например, если у вас есть CSV-файл со столбцами а, б, в, г:

data = pd.read_csv(filename) 
data.to_csv(filename, columns=['a', 'b', 'c', 'd']) 
4

Другим решением является сделать это:

import pandas as pd 
data = pd.read_csv(filename) 
data2 = df[['A','B','C']] #put 'A' 'B' 'C' in the desired order 
data2.to_csv(filename) 
+0

Это было единственное решение, которое сработало для меня. Вы могли бы сократить строку кода путем переупорядочения и создания CSV всего за один шаг. – Mtap1

Смежные вопросы