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))
CodePudding user response:
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)
CodePudding user response:
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
CodePudding user response:
have you tried the flowing code?,
for val in df['col2']:
val.append(0)
Best Regards, Stan