Как поместить список из одного элемента в ячейку информационного кадра? - PullRequest
0 голосов
/ 30 сентября 2019

Я делаю следующее:

df_temp = pd.DataFrame([[1, 2], [3, 4]], columns=['column1', 'column2'])

df_temp.at[0, 'column3'] = ['element1']

df_temp.at[1, 'column3'] = [['element1']]

Но ни один из них не дает мне список только с одним элементом в ячейке

Ответы [ 4 ]

0 голосов
/ 30 сентября 2019

Поведение вышеупомянутого назначения является непоследовательным

ПРИМЕЧАНИЕ. Это не полностью отвечает на вопрос пользователя, но дает больше контекста

  1. Если я назначаю одномерный список в обеих строках, тогда онхранит его 1-й как одну строку, а второй как список в ячейке
df_temp = pd.DataFrame([[1, 2], [3, 4]], columns=['column1', 'column2'])


df_temp.at[0, 'column3'] = ['element1']

df_temp.at[1, 'column3'] = ['element1']

column1 column2 column3
0   1   2   element1
1   3   4   [element1]

# column1   column2 column3
# 0 1   2   element1
# 1 3   4   [element1]
Если я назначу 1-й элемент в качестве 2D-списка, а затем назначу вторую строку с 1-мерным списком, он сохранит оба в виде 1D-списка в ячейке
df_temp = pd.DataFrame([[1, 2], [3, 4]], columns=['column1', 'column2'])


df_temp.at[0, 'column3'] = [['element1']]

df_temp.at[1, 'column3'] = ['element1']

# column1   column2 column3
# 0 1   2   [element1]
# 1 3   4   [element1]
ЕСЛИ я назначаю 2D список для обеих строк, то он сохраняет 1-й как 1D-список, а второй как 2D-список
df_temp = pd.DataFrame([[1, 2], [3, 4]], columns=['column1', 'column2'])


df_temp.at[0, 'column3'] = [['element1']]

df_temp.at[1, 'column3'] = [['element2']]

# column1   column2 column3
# 0 1   2   [element1]
# 1 3   4   [[element2]]

Я думаю, что это как-то связано со столбцом dtype, но этосбивает с толку. Это ошибка или ожидаемое поведение

0 голосов
/ 30 сентября 2019

Я решил проблему по

df_temp.loc[1, 'column3'] = [['element1']]
0 голосов
/ 30 сентября 2019

Вот ваши варианты:

In [44]: df_temp['column3'] = [['element_1'], ['element_2']]

In [45]: df_temp
Out[45]:
   column1  column2      column3
0        1        2  [element_1]
1        3        4  [element_2]

In [46]: df_temp['column3'][0]
Out[46]: ['element_1']

In [47]: len(df_temp['column3'][0])
Out[47]: 1

In [48]: type(df_temp['column3'][0])
Out[48]: list

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

df_temp['new_col'] = None

df_temp.at[0, 'new_col'] = [1, 2]
0 голосов
/ 30 сентября 2019

Вы можете просто использовать функцию loc.

df_temp.loc[index,column] = value

, например

df_temp.loc[0,'column1'] = 7

заменит 1 как 7

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