Reputation: 1869
is there a simple solution to solve the following problem:
I'm using Pandas dataframe
dataframe = pandas.DataFrame(data, index=[categorieid], columns=['title', 'categorieid'])
where categorieid is a list of integer values (e.g. [1,2,3,1]) and title a list of strings ['a','b,'c','d'].
And then i'm trying to access the title at a specific position with
dataframe.ix[i]['title'].values.tolist()
The problem is that i get an exception if only one title exists for a given index because then pandas saves my title as a string and not as a list.
Is there a solution to tell the dataframe constructor always to create a list() at each index even if there is only one item contained?
Thank you for any help
Edit: My printed dataframe looks like this
categorieid title
0 0 a
0 0 c
1 1 b
1 1 d
0 0 e
2 2 f
Calling my values.tolist() results in for _title in dataframe.ix[i]['title'].values.tolist(): AttributeError: 'unicode' object has no attribute 'values'
Upvotes: 0
Views: 774
Reputation: 56
I think you're making it more difficult than it has to be by the way you're building the DataFrame. Also, accessing the 'values' attribute is not needed.
Since you only have one dimension, you're probably better off using a Series. Then you can select the entries using the index and convert to a list.
In [12]: s = pd.Series(list('acbdef'), index=[0, 0, 1, 1, 0, 2], name='title')
In [13]: s
Out[13]:
0 a
0 c
1 b
1 d
0 e
2 f
Name: title, dtype: object
In [14]: s[1].tolist()
Out[14]: ['b', 'd']
If you really need a DataFrame for some reason not mentioned, it will work similarly:
In [15]: df = pd.DataFrame(s)
In [16]: df
Out[16]:
title
0 a
0 c
1 b
1 d
0 e
2 f
In [17]: df['title'][1].tolist()
Out[17]: ['b', 'd']
Upvotes: 1