Как я могу добавить столбец в существующий кадр данных Pandas, который состоит из статического, предварительно определенного списка? - PullRequest
2 голосов
/ 09 июля 2019

У меня есть существующий фрейм данных и отдельный список строк.Я хочу добавить список строк в качестве дополнительного столбца в фрейм данных.Я хочу, чтобы список был одинаковым в каждой строке.Исходный фрейм данных был создан из существующего документа Excel.

Я попытался использовать функцию вставки с аргументом значения в качестве определенного списка, но я возвращаю ошибку - «ValueError: Длина значений не соответствует длине индекса».

df1 = pd.DataFrame({'a': ['a','b','c'], 'b': ['d','e','f']})

testList = ['aa','bb','cc','dd']

#this is not working and returning an error
#dftest = df1.insert(2,"testList",testList)

#this is the resulting dataframe that I want
dfResult = pd.DataFrame({'a': ['a','b','c'], 'b': ['d','e','f'], 'addedList': [['aa','bb','cc'],['aa','bb','cc'],['aa','bb','cc']]})

dfResult

Мне нужен дополнительный столбец с тем же списком, заполненным для каждой строки, как показано в dfResult.

Ответы [ 2 ]

5 голосов
/ 09 июля 2019

Я буду рекомендовать

df1['addedList']=[['aa', 'bb', 'cc'] for x in range(len(df1))]
df1
Out[156]: 
   a  b     addedList
0  a  d  [aa, bb, cc]
1  b  e  [aa, bb, cc]
2  c  f  [aa, bb, cc]

Вот причина, по которой: Если мы создаем столбцы по одной копии, при изменении одного значения все остальные будут изменены.

df1['addedList']=[testList]*df1.shape[0]
df1['addedList1']=[['aa', 'bb', 'cc'] for x in range(len(df1))]


df1.addedList[0][0]=11111
df1
Out[162]: 
   a  b            addedList    addedList1
0  a  d  [11111, bb, cc, dd]  [aa, bb, cc]
1  b  e  [11111, bb, cc, dd]  [aa, bb, cc]
2  c  f  [11111, bb, cc, dd]  [aa, bb, cc]
df1.addedList1[0][0]=11111
df1
Out[164]: 
   a  b            addedList       addedList1
0  a  d  [11111, bb, cc, dd]  [11111, bb, cc]
1  b  e  [11111, bb, cc, dd]     [aa, bb, cc]
2  c  f  [11111, bb, cc, dd]     [aa, bb, cc]
3 голосов
/ 09 июля 2019

Вы можете создать список списков длины вашего фрейма данных и назначить его столбцу

df1['addedList']=[testList]*df1.shape[0]
df
    a   b   addedList
0   a   d   [aa, bb, cc]
1   b   e   [aa, bb, cc]
2   c   f   [aa, bb, cc]

Обратите внимание, что если вы планируете редактировать эти списки по отдельности после факта, вам следует вместо этого использовать @Ответ Вениобена:

df1['addedList']=[['aa', 'bb', 'cc'] for x in range(len(df1))]

Придает одинаковую сложность, не создавая проблем с указателями на исходный список, а не на уникальные объекты списка

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