小编sli*_*izb的帖子

将百分位数传递给pandas agg功能

我想通过pandas的agg()函数传递numpy percentile()函数,就像我在下面用各种其他numpy统计函数一样.

现在我有一个如下所示的数据框:

AGGREGATE   MY_COLUMN
A           10
A           12
B           5
B           9
A           84
B           22
Run Code Online (Sandbox Code Playgroud)

我的代码看起来像这样:

grouped = dataframe.groupby('AGGREGATE')
column = grouped['MY_COLUMN']
column.agg([np.sum, np.mean, np.std, np.median, np.var, np.min, np.max])
Run Code Online (Sandbox Code Playgroud)

上面的代码有效,但我想做类似的事情

column.agg([np.sum, np.mean, np.percentile(50), np.percentile(95)])
Run Code Online (Sandbox Code Playgroud)

即指定从agg()返回的各种百分位数

该怎么做?

python numpy pandas

38
推荐指数
11
解决办法
3万
查看次数

如何从SQL查询创建大型pandas数据框而不会耗尽内存?

我无法从MS SQL Server数据库查询大于500万条记录的表.我希望能够选择所有记录,但在选择大量数据到内存时,我的代码似乎失败了.

这有效:

import pandas.io.sql as psql
sql = "SELECT TOP 1000000 * FROM MyTable" 
data = psql.read_frame(sql, cnxn)
Run Code Online (Sandbox Code Playgroud)

...但这不起作用:

sql = "SELECT TOP 2000000 * FROM MyTable" 
data = psql.read_frame(sql, cnxn)
Run Code Online (Sandbox Code Playgroud)

它返回此错误:

File "inference.pyx", line 931, in pandas.lib.to_object_array_tuples
(pandas\lib.c:42733) Memory Error
Run Code Online (Sandbox Code Playgroud)

我在这里读到,从csv文件创建数据帧时存在类似的问题,并且解决方法是使用'iterator'和'chunksize'参数,如下所示:

read_csv('exp4326.csv', iterator=True, chunksize=1000)
Run Code Online (Sandbox Code Playgroud)

是否有类似的SQL数据库查询解决方案?如果没有,首选的解决方法是什么?我是否需要通过其他方法读取块中的记录?我在这里阅读了一些关于在pandas中处理大型数据集的讨论,但执行SELECT*查询似乎需要做很多工作.当然有一种更简单的方法.

python sql bigdata pandas

35
推荐指数
3
解决办法
5万
查看次数

标签 统计

pandas ×2

python ×2

bigdata ×1

numpy ×1

sql ×1