【问题标题】:Can't get the size of numpy.ndarray无法获得 numpy.ndarray 的大小
【发布时间】:2018-03-11 18:25:21
【问题描述】:

我有一个如下的数据框:

  version  count region      listing
2      v2      2    CAN     [7, 8]
2      v3      3    CAN  [7, 8, 9]

我想为每一行提取listing 列表并获取长度。所以我做了以下事情:

group_v2_list = group[group['version'] == 'v2']['listing'].values

我得到的输出为[list([7, 8])]。这里listing 列的类型是numpy.ndarray,这是我使用type(group_v2_list) 后得到的。

现在我想获取此group_v2_list 中的元素数量,但无法获取。

我尝试了len(group_v2_list)group_v2_list.size,但两者都给了我1。我想将2 的元素数量设为7, 8

我怎样才能得到它?

【问题讨论】:

  • 您得到了正确大小的数组。它只有一个元素(dtype 是object)。该元素是一个列表,正如output 中明确指出的那样。
  • @hpaulj:是的,我明白这一点,但我想获取该对象中元素的数量,但我不知道如何获取它。你能在这里给我一些建议吗?
  • 试试len(group_v2_list.item())。这会将列表从数组中取出,并让您将其 len
  • @hpaulj:你太棒了。谢谢:-)

标签: python pandas numpy dataframe


【解决方案1】:

您不需要为此访问numpy 表示。

一种方法是使用.loc访问器提取系列并找到第一个元素的长度:

df = pd.DataFrame({'version': ['v2', 'v3'],
                   'count': [2, 3],
                   'region': ['CAN', 'CAN'],
                   'listing': [[7, 8], [7, 8, 9]]})

df_v2_list = df.loc[df['version'] == 'v2', 'listing']

res_v2 = len(df_v2_list[0])
# 2

如果过滤后的数据中有多个元素,您可以使用pd.Series.map(len) 检索它们的长度列表:

df_v_all_list = df.loc[df['version'].str.startswith('v'), 'listing']

res_all = df_v_all_list.map(len).tolist()
# [2, 3]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-01
    • 2018-03-12
    • 1970-01-01
    • 2014-10-09
    • 1970-01-01
    相关资源
    最近更新 更多