Проблема при передаче массива к индексу в объекте Series (TypeError: len () для объекта без размера) - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть данные как ndarray

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(a == ele)
    Xpointsfromindex=np.take(b, indexfound)
    serobj1=pd.Series(Xpointsfromindex[0],index=ele)   ##error happening here
    serObj.apend(serobj1)
print(serObj)

Я ожидаю, что результат будет как

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

Но это выдает мне ошибку типа "TypeError: len() of unsized object"

Где я делаю не так?

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Просто чтобы понять, что делал OP, вот полный код, который работает -

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)

выход

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

Объяснение

indexfound=np.where(a == ele) всегда будет возвращать False, потому что вы пытаетесь сравнить list со скаляром. Изменение его в список понимания выбирает индексы

Следующим изменением является использование списка в параметре index pd.Series.

Это укажет вам путь к тому, чего вы хотите достичь

0 голосов
/ 06 сентября 2018

Я считаю, что здесь возможно создать DataFrame, если списки одинаковой длины, а затем создать lists с 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...