Установка столбцов для пустого кадра данных pandas

Это то, о чем я смущен …

import pandas as pd # this works fine df1 = pd.DataFrame(columns=['A','B']) # but let's say I have this df2 = pd.DataFrame([]) # this doesn't work! df2.columns = ['A','B'] # ValueError: Length mismatch: Expected axis has 0 elements, new values have 2 elements 

Почему это не работает? Что я могу сделать вместо этого? Это единственный способ сделать что-то подобное?

 if len(df2.index) == 0: df2 = pd.DataFrame(columns=['A','B']) else: df2.columns = ['A','B'] 

Должен быть более элегантный способ.

Спасибо за помощь!

Обновление 4/19/2015

Кто-то спросил, зачем вообще это делать:

 df2 = pd.DataFrame([]) 

Причина в том, что на самом деле я делаю что-то вроде этого:

 df2 = pd.DataFrame(data) 

… где данные могут быть пустым списком списков, но в большинстве случаев это не так. Так что да, я мог бы сделать:

 if len(data) > 0: df2 = pd.DataFrame(data, columns=['A','B']) else: df2 = pd.DataFrame(columns=['A','B']) 

… но это не кажется очень сухим (и, конечно, не кратким).

Дайте знать, если у вас появятся вопросы. Благодаря!

  • После создания файла exe python с помощью cx_freeze файл ничего не делает
  • Как «поддерживать жизнь» с cookielib и httplib в python?
  • Python Удалить последние 3 символа строки
  • Использование csvreader для gzipped-файла в Python
  • Проблемы с операциями numpy meshgrid
  • Любой способ выполнить команду piped в Python с использованием модуля подпроцесса, не используя shell = True?
  • Генерировать количество символов последовательностей
  • Как встраивать HTML в вывод iPython?
  • 2 Solutions collect form web for “Установка столбцов для пустого кадра данных pandas”

    Это похоже на ошибку в пандах. Все эти работы:

     pd.DataFrame(columns=['A', 'B']) pd.DataFrame({}, columns=['A', 'B']) pd.DataFrame(None, columns=['A', 'B']) 

    но не это:

     pd.DataFrame([], columns=['A', 'B']) 

    Пока это не исправлено, я предлагаю что-то вроде этого:

     if len(data) == 0: data = None df2 = pd.DataFrame(data, columns=['A','B']) 

    или:

     df2 = pd.DataFrame(data if len(data) > 0 else None, columns=['A', 'B']) 

    Обновление: с версии Pandas 0.16.1 , передача data = [] работает:

     In [85]: df = pd.DataFrame([], columns=['a', 'b', 'c']) In [86]: df Out[86]: Empty DataFrame Columns: [a, b, c] Index: [] 

    поэтому лучшим решением является обновление вашей версии Pandas.


    Если data представляют собой пустой список списков, то

     data = [[]] 

    Но тогда len(data) будет равен 1, поэтому len(data) > 0 не является правильным условием для проверки того, являются ли data пустым списком списков.

    Существует ряд значений для data которые могут

     pd.DataFrame(data, columns=['A','B']) 

    поднимите Исключение. Значение AssertionError или ValueError возникает, если data равны [] (нет данных), [[]] (без столбцов), [[0]] (один столбец) или [[0,1,2]] (слишком много столбцов). Поэтому вместо того, чтобы пытаться проверить все это, я думаю, что это безопаснее и проще использовать try..except здесь:

     columns = ['A', 'B'] try: df2 = pd.DataFrame(data, columns=columns) except (AssertionError, ValueError): df2 = pd.DataFrame(columns=columns) 

    Было бы неплохо, если бы существовал DRY-er, чтобы написать это, но, учитывая, что ответственность за это не отвечает , я не вижу лучшего способа.

    Interesting Posts

    Если python-dev потребуется для установки pip

    Django – импорт видов из отдельных приложений

    Python – не могу убить основной поток с помощью KeyboardInterrupt

    Как подсчитать количество файлов в каталоге с помощью Python

    Прочитать удаленный файл с разрешениями доступа

    Что такое способ Python для работы с деревом каталогов?

    Индекс сброса Pandas в серии для удаления мультииндекса

    Обнаружение американского праздника

    Как использовать пользовательскую функцию сравнения в Python 3?

    правильный способ создания соединения с БД доступен во многих модулях python

    GtkTreeView с несколькими столбцами и GtkListStore с одним настраиваемым типом (в Python)

    Как я могу создать несколько кнопок отправки django?

    DataFrame.apply в python pandas изменяет как исходные, так и повторяющиеся DataFrames

    Функция обратного вызова tkinter с переменным параметром

    Как создать объединение множества множеств с использованием выражения генератора?

    Python - лучший язык программирования в мире.