Подтвердить что ты не робот

Сохранение порядка столбцов в Python Pandas DataFrame

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

import pandas as pd

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

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

4b9b3361

Ответ 1

Кажется, что ошибка в текущей версии Pandas ('0.11.0'), что означает, что ответ Matti John не будет работать. Если вы указываете столбцы для записи в файл, они записываются в алфавитном порядке, а просто перемаркированы в соответствии с списком в столбцах. Например, этот код:

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 вы установили, выполнив:

pandas.version.version

Документация для to_csv здесь

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

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

UPDATE: по-прежнему не существует новой версии pandas, но есть обходное решение, описанное здесь, которое не требует использования другой версии pandas:

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.

Ответ 2

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

Например, если у вас есть csv с столбцами a, b, c, d:

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

Ответ 3

Другим обходным решением является следующее:

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)