Вставка кортежа в пустой кадр данных панд - PullRequest
0 голосов
/ 06 октября 2018

Я хотел бы вставить строку в пустой DataFrame.Однако это похоже на сбой для DataFrame с предопределенными индексами, и когда элементы включают в себя кортеж или список, приводящий к ошибке:

ValueError: установка элемента массива с последовательностью.

Пример кода следующий:

df = pd.DataFrame(columns=['idx1', 'idx2', 'col1', 'col2', 'col3'])
df.set_index(['idx1', 'idx2'], inplace=True)
df.loc[(1,2),:] = [3,4,(5,6)]
print(df)

Ответы [ 2 ]

0 голосов
/ 06 октября 2018

Я пытался что-то вроде этого.

def with_return(row):
    t = [5,6]
    return t

df = pd.DataFrame(columns=['idx1', 'idx2', 'col1', 'col2', 'col3'])
df.set_index(['idx1', 'idx2'], inplace=True)
df.loc[(1,2),:] = [3,4,5]  #dummy element
df['col3'] = df.apply(with_return, axis=1)
print(df)

или просто использовать серии,

df.loc[(1,2),:] = pd.Series([3,4,(5,6)], index=df.columns)

Все еще не вставлял напрямую кортеж в качестве элемента в пустой DataFrame.Но просто еще один способ сделать это.Тем не менее, loc должен быть в состоянии справиться с этим.

0 голосов
/ 06 октября 2018

Не ясно, что элементы в списке соответствуют значениям в разных столбцах.Вы можете сначала преобразовать список в серию, проиндексированную по столбцам DataFrame:

df = pd.DataFrame(columns=['idx1', 'idx2', 'col1', 'col2', 'col3'])
df.set_index(['idx1', 'idx2'], inplace=True)
df.loc[(1,2),:] = pd.Series([3,4,(5,6)], index=df.columns)
print(df)
...