Vas
Vas

Reputation: 1008

Issue in passing an array to an index in Series object(TypeError: len() of unsized object)

I have a data as ndarray

a = [0,1,0,1,2,2]

b = ['x1','x2','x3','x4','x5','x6']

Then I tried:

univals = set(a)
serObj=pd.Series()

for ele in univals:
    indexfound=np.where(a == ele)
    Xpointsfromindex=np.take(b, indexfound)
    serobj1=pd.Series(Xpointsfromindex[0],index=ele)   ##error happening here
    serObj.apend(serobj1)
print(serObj)

I expect output to be like

0    ['x1','x3']
1    ['x2','x4']
2    ['x5','x6']

But it is giving me an error like "TypeError: len() of unsized object"

Where am I doing wrong?

Upvotes: 0

Views: 103

Answers (2)

Vivek Kalyanarangan
Vivek Kalyanarangan

Reputation: 9081

Just to stick to what OP was doing, here is the full code that works -

import pandas as pd
import numpy as np

a = [0,1,0,1,2,2]
b = ['x1','x2','x3','x4','x5','x6']

univals = set(a)
serObj=pd.Series()

for ele in univals:
    indexfound=np.where([i==ele for i in a])
    Xpointsfromindex=np.take(b, indexfound)
    print(Xpointsfromindex)
    serobj1=pd.Series(Xpointsfromindex[0],index=[ele for _ in range(np.shape(indexfound)[1])])   ##error happening here
    serObj.append(serobj1)

print(serObj)

Output

[['x1' 'x3']]
[['x2' 'x4']]
[['x5' 'x6']]

Explanation

indexfound=np.where(a == ele) will always return False because you are trying to compare a list with a scalar. Changing it to list comprehension fetches the indices

The next change is using list comprehension at the index parameter of the pd.Series.

This will set you on your way to what you want to achieve

Upvotes: 0

jezrael
jezrael

Reputation: 863361

I believe here is possible create DataFrame if same length of lists and then create lists with groupby:

a = [0,1,0,1,2,2]
b = ['x1','x2','x3','x4','x5','x6']
df = pd.DataFrame({'a':a, 'b':b})
print(df)
   a   b
0  0  x1
1  1  x2
2  0  x3
3  1  x4
4  2  x5
5  2  x6

serObj = df.groupby('a')['b'].apply(list)
print (serObj)
a
0    [x1, x3]
1    [x2, x4]
2    [x5, x6]
Name: b, dtype: object

Upvotes: 1

Related Questions