Append values from dataframe column to list
You could try this script if you need to append one column only:
a_list = df['iso'].tolist()
For extending a list by appending elements from the iterable, use 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']
Another solution is to use numpy.ravel
with transpose:
a_list = df[['iso','country']].values.T.ravel().tolist()
print (a_list)
['x', 'y', 'z', 'w', 'a', 'b', 'c', 'd']
Your problem arises from the fact that df['iso'].tolist()
creates a list. The list is appended (given a place in the list at the single index), so you get a list of list. You can try:
a_list.extend(df['iso'].tolist())
extend
does what you ask for . If you try do this with append
, you can do something like:
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)
Output
['x', 'y', 'z', 'w', 'a', 'b', 'c', 'd']
To access the data of each row of the Pandas dataframe we can use DataFrame.iat attribute and then we can append the data of each row to the end of the list. In first for loop iterate over each row and create a list to store the data of the current row In second for loop iterate over all the columns and append the data of each column to the list after that append the current row to the list
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)