Ошибка получения: Длина значений (1) не соответствует длине индекса (9)

#python #pandas

Вопрос:

Напишите программу Pandas, чтобы найти позиции чисел, кратных 5 из данного ряда.

Я получаю эту ошибку «Ошибка значения: длина значений (1) не соответствует длине индекса (9)», как я могу это исправить ниже приведен код :

 import pandas as pd
import numpy as np
num_series = pd.Series(np.random.randint(1, 10, 9))
print("Original Series:")
print(num_series)
result = np.argwhere(num_series % 5==0)
print("Positions of numbers that are multiples of 5:")
print(result)
 

Ответ №1:

A pd.Series не может быть передано напрямую np.argwhere , Series.to_numpy сначала преобразуйте:

 result = np.argwhere(num_series.to_numpy() % 5 == 0)
 

В качестве альтернативы мы можем просто замаскировать индекс ряда и pd.Index to_numpy при необходимости преобразовать отфильтрованный:

 result = num_series.index[num_series % 5 == 0].to_numpy()
 

Пример вывода:

 import numpy as np
import pandas as pd

num_series = pd.Series(np.random.randint(1, 10, 9))
print("Original Series:")
print(num_series)
result = np.argwhere(num_series.to_numpy() % 5 == 0)
print("Positions of numbers that are multiples of 5:")
print(result)
 
 Original Series:
0    7
1    8
2    5
3    7
4    8
5    6
6    8
7    6
8    8
dtype: int32
Positions of numbers that are multiples of 5:
[[2]]
 

 import numpy as np
import pandas as pd

num_series = pd.Series(np.random.randint(1, 10, 9))
print("Original Series:")
print(num_series)
result = num_series.index[num_series % 5 == 0]
print("Positions of numbers that are multiples of 5:")
print("pd.Index:", result)
print("to_numpy:", result.to_numpy())
 
 Original Series:
0    6
1    8
2    4
3    3
4    9
5    5
6    2
7    8
8    8
dtype: int32
Positions of numbers that are multiples of 5:
pd.Index: Int64Index([5], dtype='int64')
to_numpy: [5]
 

Ответ №2:

Попробуйте использовать:

 # Solution 1:
res = np.argwhere(num_series.to_numpy() % 5 == 0)

# Solution 2:
res = num_series[num_series % 5 == 0]
 

Очевидно , когда вы используете np.argwhere , вы передаете a pd.Series в np.nonzero функцию, которая попытается восстановить серию, но потерпит неудачу. Ранее существовал nonzero метод для pd.Series , но он был отвергнут (https://pandas.pydata.org/pandas-docs/version/0.25.3/reference/api/pandas.Series.nonzero.html#pandas-series-nonzero).