如何从CSV选中值生成数组并转换为可直接求和的普通数组?
问题描述
用户编写了如下Python代码,尝试从DataFrame中筛选account为'123'的shares值并添加到数组:
array = [] for vid in account: vid_shares = (df.loc[df['account'] == '123', 'shares']) array.append(vid_shares) print(array)
执行后得到带索引的Series格式输出:
1 10.0 2 15.0 3 0.0 4 12.0 5 17.0 6 0.0 7 9.0 8 12.0 9 13.0 10 8.0 11 30.0 12 0.0 13 16.0 Name: shares, dtype: float64
用户需要将结果转为[10, 15, 0, 12,...]这类普通数值数组,方便用sum()函数求和。
解决方案
方法1:直接转换Series为数值数组
首先你的循环完全多余——每次循环都重复筛选了所有account='123'的行,导致数组里多次存入同一个Series。直接一次性筛选后转换即可:
# 筛选目标数据 target_shares = df.loc[df['account'] == '123', 'shares'] # 转numpy数值数组 num_array = target_shares.values # 或者用to_numpy(),更推荐 num_array = target_shares.to_numpy() # 甚至不需要转数组,Series本身支持sum() total = target_shares.sum()
方法2:转为Python原生列表
如果需要的是Python列表而非numpy数组,用tolist():
num_list = target_shares.tolist() total = sum(num_list)
(可选)修正原始循环代码
如果你的循环有其他未说明的逻辑,那每次append时要提取具体数值(比如取单值用.iloc[0]),但显然这个场景下循环是没必要的,建议用上面的方法。
内容的提问来源于stack exchange,提问作者Benjamin McDowell
相关产品推荐
相关产品推荐

