Как записать фрейм данных в csv с заголовком одной строки (5 тыс. столбцов)?

#python #pandas #numpy #dataframe #export-to-csv

#python #панды #numpy #фрейм данных #экспорт в csv

Вопрос:

Я пытаюсь экспортировать фрейм данных pandas с помощью to_csv, чтобы его можно было обработать другим инструментом, прежде чем использовать его снова с помощью python. Это набор данных токенов с 5 тыс. столбцов. При экспорте заголовок разделяется на две строки. Возможно, это не проблема для pandas, но в этом случае мне нужно экспортировать его в одну строку csv. Это ограничение pandas или формат csv?

В настоящее время поиск не дал совместимых результатов. Единственное решение, которое я придумал, — это записать имена столбцов и значения отдельно, например. сначала записать список столбцов str, а затем массив numpy в csv. Можно ли это реализовать, и если да, то как?

Комментарии:

1. Откуда вы знаете, что он разделен на 2 строки? Это просто ваш просмотрщик или он действительно на 2 строках?

2. Будьте осторожны, в файле csv строка может занимать несколько строк. Заголовок просто разбит на несколько строк, а не на несколько строк?

3. @EdChum как я могу убедиться, что это не просто мой просмотрщик? При открытии в Excel он заполняет две разные ячейки.

4. Ну, когда вы читаете csv обратно в pandas, остается ли количество столбцов одинаковым? Если да, то это как-то связано с Excel

Ответ №1:

Для меня эта проблема была вызвана наличием нескольких индексов. Самый простой способ решить эту проблему — указать свои собственные заголовки. Я нашел ссылку на вызываемую опцию tupleize_cols , но она не существует в текущих (1.2.2) pandas.

Я использовал следующую агрегацию:

 df.groupby(["device"]).agg({
    "outage_length":["count","sum"],
}).to_csv("example.csv")
  

Это привело к следующему выводу csv:

 ,outage_length,outage_length
,count,sum
device,,
device0001,3,679.0
device0002,1,113.0
device0003,2,400.0
device0004,1,112.0
  

Я указал свои собственные заголовки в вызове to_csv ; исключая мой group_by , следующим образом:

 }).to_csv("example.csv",header=("flaps","downtime"))
  

И получил следующий вывод csv, который был гораздо более приятным для программного обеспечения для работы с электронными таблицами:

 device,flaps,downtime
device0001,3,679.0
device0002,1,113.0
device0003,2,400.0
device0004,1,112.0