首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >numpy数组转换为pandas dataframe drops值

numpy数组转换为pandas dataframe drops值
EN

Stack Overflow用户
提问于 2016-08-25 04:42:41
回答 2查看 137关注 0票数 2

我需要计算2D网格中每个节点的统计数据。我认为最简单的方法是取两个范围的交叉连接(也称为笛卡尔乘积)。我使用numpy将其实现为以下函数:

代码语言:javascript
复制
def node_grid(x_range, y_range, x_increment, y_increment):
    x_min = float(x_range[0])
    x_max = float(x_range[1])
    x_num = (x_max - x_min)/x_increment + 1
    y_min = float(y_range[0])
    y_max = float(y_range[1])
    y_num = (y_max - y_min)/y_increment + 1

    x = np.linspace(x_min, x_max, x_num)
    y = np.linspace(y_min, y_max, y_num)

    ng = list(product(x, y))
    ng = np.array(ng)
    return ng, x, y

但是,当我将其转换为pandas数据帧时,它丢弃了值。例如:

代码语言:javascript
复制
In [2]: ng = node_grid(x_range=(-60, 120), y_range=(0, 40), x_increment=0.1, y_increment=0.1)
In [3]: ng[0][(ng[0][:,0] > -31) & (ng[0][:,0] < -30) & (ng[0][:,1]==10)]
Out[3]: array([[-30.9,  10. ],
   [-30.8,  10. ],
   [-30.7,  10. ],
   [-30.6,  10. ],
   [-30.5,  10. ],
   [-30.4,  10. ],
   [-30.3,  10. ],
   [-30.2,  10. ],
   [-30.1,  10. ]])

In [4]: node_df = pd.DataFrame(ng[0])
node_df.columns = ['xx','depth']
print(node_df[(node_df.depth==10) & node_df.xx.between(-30,-31)])
Out[4]:Empty DataFrame
Columns: [xx, depth]
Index: []

数据帧不是空的:

代码语言:javascript
复制
In [5]: print(node_df.head())
Out[5]:      xx  depth
0 -60.0    0.0
1 -60.0    0.1
2 -60.0    0.2
3 -60.0    0.3
4 -60.0    0.4

当将numpy数组中的值放入pandas数组中时,这些值将被删除。为什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-25 05:50:12

"between“函数要求第一个参数小于后者。

In: print(node_df[(node_df.depth==10) & node_df.xx.between(-31,-30)]) xx depth 116390 -31.0 10.0 116791 -30.9 10.0 117192 -30.8 10.0 117593 -30.7 10.0 117994 -30.6 10.0 118395 -30.5 10.0 118796 -30.4 10.0 119197 -30.3 10.0 119598 -30.2 10.0 119999 -30.1 10.0 120400 -30.0 10.0

为了清楚起见,使用的product()函数来自itertools包,即from itertools import product

票数 1
EN

Stack Overflow用户

发布于 2016-08-25 05:49:13

我不能完全复制你的代码。

但我发现问题在于,您必须在between查询中改变下限和上限。下面的方法对我很有效:

代码语言:javascript
复制
print(node_df[(node_df.depth==10) & node_df.xx.between(-31,-30)])

使用时:

代码语言:javascript
复制
ng = np.array([[-30.9,  10. ],
                [-30.8,  10. ],
                [-30.7,  10. ],
                [-30.6,  10. ],
                [-30.5,  10. ],
                [-30.4,  10. ],
                [-30.3,  10. ],
                [-30.2,  10. ],
                [-30.1,  10. ]])
node_df = pd.DataFrame(ng)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39132712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档