#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