Pandas Dataframe add element to a list in a cell

Question:

I am trying something like this:
List append in pandas cell

But the problem is the post is old and everything is deprecated and should not be used anymore.

d = {'col1': ['TEST', 'TEST'], 'col2': [[1, 2], [1, 2]], 'col3': [35, 89]}
df = pd.DataFrame(data=d)
col1 col2 col3
TEST [1, 2, 3] 35
TEST [1, 2, 3] 89

My Dataframe looks like this, were there is the col2 is the one I am interested in. I need to add [0,0] to the lists in col2 for every row in the DataFrame. My real DataFrame is of dynamic shape so I cant just set every cell on its own.

End result should look like this:

col1 col2 col3
TEST [1, 2, 3, 0, 0] 35
TEST [1, 2, 3, 0, 0] 89

I fooled around with df.apply and df.assign but I can’t seem to get it to work.
I tried:

df['col2'] += [0, 0]

df = df.col2.apply(lambda x: x.append([0,0]))
     Which returns a Series that looks nothing like i need it

df = df.assign(new_column = lambda x: x + list([0, 0))
Asked By: Pasgru

||

Answers:

Not sure if this is the best way to go but, option 2 works with a little modification

import pandas as pd

d = {'col1': ['TEST', 'TEST'], 'col2': [[1, 2], [1, 2]], 'col3': [35, 89]}
df = pd.DataFrame(data=d)
df["col2"] = df["col2"].apply(lambda x: x + [0,0])
print(df)

Firstly, if you want to add all members of an iterable to a list use .extend instead of .append. This doesn’t work because the method works inplace and doesn’t return anything so "col2" values become None, so use list summation instead. Finally, you want to assign your modified column to the original DataFrame, not override it (this is the reason for the Series return)

Answered By: Tzane

One idea is use list comprehension:

df["col2"] = [x + [0,0] for x in  df["col2"]]
   
print (df)
   col1          col2  col3
0  TEST  [1, 2, 0, 0]    35
1  TEST  [1, 2, 0, 0]    89
Answered By: jezrael

have you tried the flowing code?,

for val in df['col2']:
val.append(0)

Best Regards,
Stan

Answered By: Stan U.
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.