【问题标题】:Length of passed values is 1, index implies 10传递值的长度为 1,索引表示 10
【发布时间】:2021-04-21 04:25:01
【问题描述】:

为什么和这个错误是关于什么的???它显示通过的长度 值为 1,索引意味着 10。我尝试了很多次运行 代码和我遇到的一样

ser = pd.Series(np.random.randint(1, 50, 10))
result = np.argwhere(ser % 3==0)
print(result)

【问题讨论】:

  • 你试过打印np.random.randint(1, 50, 10)的值吗,你会发现它生成了10个随机整数。命令是 randint(low, high, size)
  • 是的,它正在生成 10 个随机整数,我想从该系列中提取 3 的倍数而不循环
  • @ADITYAOZA 请发布您的预期输出。
  • 预期输出将是3的倍数的数字位置列表

标签: pandas


【解决方案1】:

使用Index.tolist:

In [1374]: ser
Out[1374]: 
0    44
1     5
2    35
3    10
4    16
5    20
6    25
7     9
8    44
9    16
dtype: int64

In [1372]: l = ser[ser % 3 == 0].index.tolist()

In [1373]: l
Out[1373]: [7]

其中l 将是indexes 中的list,其中的元素是3 的倍数。

【讨论】:

  • @ADITYAOZA 如果答案有帮助,请至少upvote
【解决方案2】:

argwhere() 在 numpy 数组而不是 panda 系列上运行。见下文

a = np.random.randint(1, 50, 12)
a = pd.Series(a)
print(a)
np.argwhere(a.values%3==0)

输出

0     28
1     46
2      4
3     40
4     19
5     26
6      6
7     24
8     26
9     30
10    33
11    27
dtype: int64
[250]:
array([[ 6],
       [ 7],
       [ 9],
       [10],
       [11]])

【讨论】:

  • 这实际上是一个非常有用的评论,谢谢!
【解决方案3】:

请阅读numpy.random.randint 的文档,您会看到参数是(低、高、大小)。

就您而言,您发送的是 (1, 50, 10)。所以会生成 10 个 1 到 50 之间的随机数。

如果你想要 3 的倍数,那么你需要这样做ser[ser % 3==0] 而不是使用np.anywhere

查看之前提出的类似问题并在Stack Overflow上回答

import pandas as pd
import numpy as np
ser = pd.Series(np.random.randint(1, 50, 10))
print (ser)
result = ser[ser % 3==0]
print(result)

输出将是:

原创系列。

0    17
1    34
2    29
3    15
4    24
5    20
6    21
7    48
8     6
9    42
dtype: int64

3 的倍数是:

3    15
4    24
6    21
7    48
8     6
9    42
dtype: int64

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-09
    • 2015-08-09
    • 2022-08-08
    • 2020-03-19
    • 1970-01-01
    • 2021-05-23
    • 2018-10-15
    • 2020-05-21
    相关资源
    最近更新 更多