Как удалить подобную ошибку (не удается выполнить __mod__ с этим типом индекса: Index)?

#python #pandas #numpy #dataframe #lambda

#python #pandas #numpy #фрейм данных #лямбда

Вопрос:

Я новичок в Pandas и Numpy. Что я пытаюсь сделать здесь, это взять массив Numpy, преобразовать их в фрейм данных pandas, из этого фрейма данных я пытаюсь взять только нечетное количество строк, используя .iloc и лямбда? но он показывает ошибку, подобную

не удается выполнить mod с этим типом индекса: Index.

Можете ли вы, пожалуйста, помочь мне здесь?

# Массив Numpy

 df= np.arange(25).reshape(5,5)
  

# Изменение на Dataframe

 index = [f'{num}' for num in range(5)]

columnss = list(string.ascii_lowercase[0:5])

df=pd.DataFrame(data=df,columns=columnss,index=index)
  

# Доступ к строкам через индекс

 df.iloc[lambda x : x.index%2 == 0] 
  

Ответ №1:

Преобразовать индекс в целые числа:

 a = df.rename(index=int).iloc[lambda x : x.index%2 == 0]
print (a)
    a   b   c   d   e
0   0   1   2   3   4
2  10  11  12  13  14
4  20  21  22  23  24
  

Или использовать:

 arr = np.arange(25).reshape(5,5)
#removed converted to strings
index = range(5)
columnss = list(string.ascii_lowercase[0:5])

df = pd.DataFrame(arr,columns=columnss,index=index)
  

Если требуется выбор по индексу без целых чисел:

 arr = np.arange(25).reshape(5,5)

index = [f'{num}val' for num in range(5)]
columnss = list(string.ascii_lowercase[0:5])
df=pd.DataFrame(data=arr,columns=columnss,index=index)

# Accessing the rows via index
a = df.iloc[lambda x : np.arange(len(x))%2 == 0]
print (a)
       a   b   c   d   e
0val   0   1   2   3   4
2val  10  11  12  13  14
4val  20  21  22  23  24
  

Ответ №2:

другим решением было бы,

 pd.DataFrame(df[::2], columns=list(string.ascii_lowercase[0:5]))
  

O/P:

     a   b   c   d   e
0   0   1   2   3   4
1  10  11  12  13  14
2  20  21  22  23  24