Кортеж кортежей не допускается в конструкторе панд. DataFrame - PullRequest
0 голосов
/ 02 февраля 2019

Работая с pandas dataframe в python3, я попытался вызвать конструктор dataframe для кортежей кортежей.Это привело к неправильной ошибке вызова конструктора.Краткая ссылка на документацию pandas.DataFrame показала, что параметр данных можно инициализировать с помощью numpy ndarray (структурированного или однородного), dict или DataFrame, Dict может содержать Series, массивы, константы или объекты, похожие на списки.Я не могу распознать причину, по которой кортеж кортежей был недействительным, а список кортежей действительным.

Я преобразовал кортеж кортежей в список кортежей, и это спасло мою задницу.

batch_computer_science = ('r1', 'r2', 'r3', 'r4') #roll number of students
batch_mechanical_engg = ('a1', 'a2', 'a3', 'a4') #roll number of students
session_2018 = (batch_computer_science, batch_mechanical_engg)

#In the actual code there are 8 types of batches with 30 students each, sorted in order of registration in the class.`

session_df = pd.DataFrame(session_2018) # This throws an error, improper constructor called.

Я ожидал, что кортеж кортежей сработает, но список кортежей работает, кортеж кортежей не работает.

1 Ответ

0 голосов
/ 02 февраля 2019

Ты прав.Списки кортежей работают, кортежи кортежей не работают.

Начиная с v0.23.4, источник для класса pd.DataFrame указывает, что list являетсярассматривается как особый случай:

elif isinstance(data, (list, types.GeneratorType)):
    if isinstance(data, types.GeneratorType):
        data = list(data)
    if len(data) > 0:
        if is_list_like(data[0]) and getattr(data[0], 'ndim', 1) == 1:
           # ....

Так что просто используйте список кортежей:

session_df = pd.DataFrame(list(session_2018))

Помните, Pandas - это API, а не язык программирования.Детали могут быть изменены без предварительного уведомления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...