How to overwrite an array cell in pandas DataFrame?

Viewed 109

There is the following DataFrame:

df = pd.DataFrame({
    'ID': [1,2,3],
    'Name': ['abc', 'jkl', 'qwe'],
    'Array': [[1,2,3], [10,11,12], [4,5,4]]
})

    ID  Name    Array
0   1   abc [1, 2, 3]
1   2   jkl [10, 11, 12]
2   3   qwe [4, 5, 4]

Now I wan't to overwrite the array where df['Name']=='qwe' to [17,23,5]. The correct output would look like this:

    ID  Name    Array
0   1   abc [1, 2, 3]
1   2   jkl [10, 11, 12]
2   3   qwe [17, 23, 5] 

My ideas:

df.loc[df['Name']=='qwe', 'Array'] = [17,23,5]
-> ValueError: Must have equal len keys and value when setting with an iterable

df.loc[df['Name']=='qwe', 'Array'] = [[17,23,5]]
-> ValueError: Must have equal len keys and value when setting with an ndarray

df.loc[df['Name']=='qwe', 'Array'] = np.array([17,23,5])
-> ValueError: Must have equal len keys and value when setting with an iterable

df.loc[df['Name']=='qwe', 'Array'] = pd.DataFrame({'Array':[[17,23,5]]})
->  ID  Name    Array
0   1   abc [1, 2, 3]
1   2   jkl [10, 11, 12]
2   3   qwe NaN

Is there an easy way to solve the problem? Thanks in advance.

1 Answers

Create Series with filtered index values by mask:

df = pd.DataFrame({
    'ID': [1,2,3],
    'Name': ['abc', 'qwe', 'qwe'],
    'Array': [[1,2,3], [10,11,12], [4,5,4]]
})

m = df['Name']=='qwe'
df.loc[m, 'Array'] =  pd.Series([[17,23,5]] * m.sum(), index=df.index[m])

print (df)
   ID Name        Array
0   1  abc    [1, 2, 3]
1   2  qwe  [17, 23, 5]
2   3  qwe  [17, 23, 5]
Related