У меня есть фрейм данных с несколькими столбцами, и я хочу добавить в пустой список значения одного столбца, чтобы желаемый результат был следующим:
empty_list = [value_1,value_2,value_3...]
Я пробовал следующее:
df = pd.DataFrame({'country':['a','b','c','d'],
'gdp':[1,2,3,4],
'iso':['x','y','z','w']})
a_list = []
a_list.append(df['iso'])
a_list.append(df['iso'].values)
a_list.append(df['iso'].tolist())
В любом случае, я получаю список со списками, массивами numpy или сериями внутри него, и я хотел бы иметь непосредственно записи.
Если нет, то какой вывод ожидается от вашего образца DataFrame?
если вы добавляете к списку, вы получаете список в списке. поэтому вместо добавления просто получите свой список напрямую, проблема решена.
Этого примера должно быть достаточно:
myList = df['iso'].tolist()
print(myList)
Выход:
['x', 'y', 'z', 'w']
Мне нужно добавить результаты несколько раз через цикл, так что это не сработает. Извините, что не указал это в моем вопросе
Вы можете попробовать этот скрипт, если вам нужно добавить только один столбец:
a_list = df['iso'].tolist()
Для расширения списка путем добавления элементов из итерации используйте extend
:
a_list = []
a_list.extend(df['iso'].tolist())
a_list.extend(df['country'].tolist())
print (a_list)
['x', 'y', 'z', 'w', 'a', 'b', 'c', 'd']
Другое решение — использовать numpy.ravel
с транспонированием:
a_list = df[['iso','country']].values.T.ravel().tolist()
print (a_list)
['x', 'y', 'z', 'w', 'a', 'b', 'c', 'd']
Ваша проблема связана с тем, что df['iso'].tolist()
создает список. Список добавляется (задается место в списке по одному индексу), поэтому вы получаете список списка. Можешь попробовать:
a_list.extend(df['iso'].tolist())
extend
делает то, что вы просите. Если вы попытаетесь сделать это с помощью append
, вы можете сделать что-то вроде:
import itertools
a_list = []
a_list.append(df.iso.tolist())
a_list.append(df.country.tolist())
a_list=list(itertools.chain.from_iterable(a_list))
print(a_list)
Выход
['x', 'y', 'z', 'w', 'a', 'b', 'c', 'd']
Чтобы получить доступ к данным каждой строки фрейма данных Pandas, мы можем использовать атрибут DataFrame.iat, а затем мы можем добавить данные каждой строки в конец списка. В первом цикле for перебираем каждую строку и создаем список для хранения данных текущей строки. Во втором цикле for перебираем все столбцы и добавляем данные каждого столбца в список, после чего добавляем текущую строку в список.
df = pd.DataFrame({'country':['a','b','c','d'],'gdp':[1,2,3,4],'iso':['x','y','z','w']})
a_list = []
for i in range((df.shape[0])):
cur_row =[]
for j in range(df.shape[1]):
cur_row.append(df.iat[i, j])
a_list.append(cur_row)
Пожалуйста, отредактируйте свой ответ и добавьте объяснение, чтобы выполнить рекомендации stackoverflow для хороших ответов.
Так вам нужно
a_list = df['iso'].tolist()
?