Python pandas insert list into a cell

来源:互联网 发布:mac怎么局部截图 编辑:程序博客网 时间:2024/06/08 09:27

http://stackoverflow.com/questions/26483254/python-pandas-insert-list-into-a-cell

up vote2down votefavorite

I have a list 'abc' and a dataframe 'df':

abc = ['foo', 'bar']df =    A  B0  12  NaN1  23  NaN

I want to insert the list into cell 1B, so I want this result:

    A  B0  12  NaN1  23  ['foo', 'bar']

Ho can I do that?

1) If I use this:

df.ix[1,'B'] = abc

I get the following error message:

ValueError: Must have equal len keys and value when setting with an iterable

because it tries to insert the list (that has two elements) into a row / column but not into a cell.

2) If I use this:

df.ix[1,'B'] = [abc]

then it inserts a list that has only one element that is the 'abc' list ( [['foo', 'bar']] ).

3) If I use this:

df.ix[1,'B'] = ', '.join(abc)

then it inserts a string: ( foo, bar ) but not a list.

4) If I use this:

df.ix[1,'B'] = [', '.join(abc)]

then it inserts a list but it has only one element ( ['foo, bar'] ) but not two as I want ( ['foo', 'bar'] ).

Thanks for help!


EDIT

My new dataframe and the old list:

abc = ['foo', 'bar']df2 =    A    B         C0  12  NaN      'bla'1  23  NaN  'bla bla'

Another dataframe:

df3 =    A    B         C                    D0  12  NaN      'bla'  ['item1', 'item2']1  23  NaN  'bla bla'        [11, 12, 13]

I want insert the 'abc' list into df2.loc[1,'B'] and/or df3.loc[1,'B'].

If the dataframe has columns only with integer values and/or NaN values and/or list values then inserting a list into a cell works perfectly. If the dataframe has columns only with string values and/or NaN values and/or list values then inserting a list into a cell works perfectly. But if the dataframe has columns with integer and string values and other columns then the error message appears if I use this: df2.loc[1,'B'] = abc or df3.loc[1,'B'] = abc.

Another dataframe:

df4 =          A     B0      'bla'  NaN1  'bla bla'  NaN

These inserts work perfectly: df.loc[1,'B'] = abc or df4.loc[1,'B'] = abc.

Thank you for your help!

shareimprove this question
 
1 
What version pandas are you using? the following worked using pandas 0.15.0df.loc[1,'b'] = ['foo','bar'] – EdChum Oct 21 '14 at 9:30
 
Thank you! I use Python 2.7 and I tried pandas 0.14.0 and 0.15.0 and it worked with the test data above. But what if I have a 'C' column as well with some integer values? 'A' has strings. Having an integer column and a srting column I get the same error: ValueError: Must have equal len keys and value when setting with an iterable – ragesz Oct 21 '14 at 16:43 
 
You're going to have to post data and code to explain and show what you mean – EdChum Oct 21 '14 at 17:47

1 Answer

activeoldestvotes
up vote4down voteaccepted

df3.set_value(1, 'B', abc) works for any dataframe. Take care of the data type of column 'B'. Eg. a list can not be inserted into a float column, at that case df['B'] = df['B'].astype(object) can help.

shareimprove this answer


0 0