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

Я получаю эту ошибку «ValueError: длина значений (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)
-2
Jonny 22 Сен 2021 в 18:36

2 ответа

Лучший ответ

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]
1
Henry Ecker 22 Сен 2021 в 15:40

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

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

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

Очевидно, когда вы используете np.argwhere, вы передаете 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).

0
Gábor Pálovics 22 Сен 2021 в 16:01