小编Qui*_*2k1的帖子

docstring是否应该只包含函数显式引发的异常?

在python中编写doc字符串时,我想知道docstring是否应该包含隐式引发的异常,或者它是否还应该包含我明确提出的异常.

考虑这个功能

def inv(a):
    if a == 0:
        raise ZeroDivisionError
    else:
        return 1/a
Run Code Online (Sandbox Code Playgroud)

因此,在"Raises"关键字下的文档字符串中,我肯定会放置ZeroDivisionError.但是,根据输入,我也会期望TypeError.那么你也会把它放在docstring中吗?

由于EAFP原则(如果我理解正确),我不想在这里检查类型,对吗?任何提示(也在代码示例上)都是受欢迎的.

python docstring raise python-3.x

9
推荐指数
2
解决办法
815
查看次数

管道中的虚拟创建与列车和测试集中的不同级别

我正在探索scikit学习管道.我还想用管道预处理数据.但是,我的列车和测试数据具有不同级别的分类变量.示例:考虑:

import pandas as pd
train = pd.Series(list('abbaa'))
test = pd.Series(list('abcd'))
Run Code Online (Sandbox Code Playgroud)

我用pandas写了一个TransformerMixinClass

class CreateDummies(TransformerMixin):

def transform(self, X, **transformparams):
    return pd.get_dummies(X).copy()

def fit(self, X, y=None, **fitparams):
    return self
Run Code Online (Sandbox Code Playgroud)

fit_transform产生列车数据2列和测试数据4列.所以这并不奇怪,但不适合管道

同样,我试图导入标签编码器(和OneHotEncoder用于潜在的后续步骤):

from sklearn.preprocessing import LabelEncoder, OneHotEncoder
le = LabelEncoder()
le.fit_transform(train)
le.transform(test)
Run Code Online (Sandbox Code Playgroud)

这并不奇怪,这会产生错误.

所以这里的问题是我需要测试集中包含的一些信息.有没有一种好方法将其包含在管道中?

python pandas scikit-learn

9
推荐指数
1
解决办法
4125
查看次数

有什么方法可以加快Seaborns Pairplot的速度

我有一个具有250.000行但140列的数据框,并且正在尝试构建对图。的变量。我知道子图的数量巨大,而且绘制所需的时间也很多。(我在配备3,4 GHZ和32 GB RAM的i5上等待了一个多小时)。

记得scikit learning允许并行构建随机森林,我正在检查seaborn是否也可以这样做。但是,我什么也没找到。源代码似乎为每个图像调用了matplotlib plot函数。

这不能并行化吗?如果是,那么从这里开始的好方法是什么?

python parallel-processing performance seaborn

7
推荐指数
3
解决办法
3021
查看次数

使用python将字典列表插入到SQL表中

我正在使用python和sql数据库的第一步,仍然不确定使用哪个包以及如何使用.我有一个大约300k字典的列表,每个字典大约有20个键.这些dicts应插入SQL表中.

在我看来,dict方法列表的优点是,我明确地命名了我想要输入特定值的列.(可能是,这不是一个好方法)

让我提出一个更具体的例子来捕捉我的问题的基本要素.该表由三列组成:ID(整数),Price(十进制),Type(字符串).Type支持空值.

我的dict的键具有相同的名称,而dicts列表可能如下所示:

lst = [{'ID':1, 'Price': '9.95', 'Type': None}, 
       {'ID':2, 'Price': '7.95', 'Type': 'Sports'}, 
       {'ID':3, 'Price': '4.95', 'Type': 'Tools'}, ...]
Run Code Online (Sandbox Code Playgroud)

所以出现的问题如下:

  1. 使用dicts的方法是正确的吗?(注意我有20列)
  2. 如果是/否:如何有效地执行此类查询?
  3. 是否有必要将价格转换为Decimal并在SQL语句之前,或者可以"实时"实现
  4. None值是否自动转换为null,还是有额外的工作要做?

python sql python-3.x

6
推荐指数
1
解决办法
5461
查看次数

在管道中使用 Transformers 在 scikit-learn 中进行异常值检测

我想知道是否可以在 scikit-learn 的管道中包含 scikit-learn 异常值检测,例如隔离森林

所以这里的问题是我们只想在训练数据上拟合这样的对象,而在测试数据上什么都不做。特别是,人们可能想在这里使用交叉验证。

解决方案如何?

构建一个继承自 TransformerMixin(以及用于 ParameterTuning 的 BaseEstimator)的类。现在定义一个 fit_transform 函数,用于存储该函数是否已被调用的状态。如果尚未调用,则该函数会拟合并预测数据上的异常值函数。如果之前已经调用过该函数,则已经对训练数据调用了异常值检测,因此我们假设我们现在找到了我们简单返回的测试数据。

这种方法有机会奏效还是我在这里遗漏了什么?

python outliers scikit-learn

5
推荐指数
1
解决办法
2618
查看次数

pandas pivot_table,日期为值

假设我有下表的客户数据

df = pd.DataFrame.from_dict({"Customer":[0,0,1], 
        "Date":['01.01.2016', '01.02.2016', '01.01.2016'], 
        "Type":["First Buy", "Second Buy", "First Buy"], 
        "Value":[10,20,10]})
Run Code Online (Sandbox Code Playgroud)

看起来像这样:

Customer |   Date   |   Type   |   Value
-----------------------------------------
       0 |01.01.2016|First Buy |     10 
-----------------------------------------
       0 |01.02.2016|Second Buy|     20 
-----------------------------------------
       1 |01.01.2016|First Buy |     10 
Run Code Online (Sandbox Code Playgroud)

我想通过Type列来旋转表.但是,旋转只会给出数值Value列.我想要一个像这样的结构:

 Customer | First Buy Date | First Buy Value | Second Buy Date | Second Buy Value
---------------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

缺少值是NAN或NAT这是否可以使用pivot_table.如果没有,我可以想象一些解决方法,但它们非常长.还有其他建议吗?

pivot-table dataframe pandas

4
推荐指数
1
解决办法
611
查看次数

从事务数据到集合列表的有效方式

我有一个csv文件,其中包含以下形式的交易数据

import pandas as pd
df = pd.DataFrame({'OrderID':[1,1,1,1,2,2], 'ItemID':[1,2,3,4,1,2]})
print(df)
   ItemID  OrderID
0       1        1
1       2        1
2       3        1
3       4        1
4       1        2
5       2        2
Run Code Online (Sandbox Code Playgroud)

我想获得一个列表,其中包含每个OrderID的项目集.

这可以通过以下方式获得

df.groupby('OrderID').apply(lambda x: set(x['ItemID'])).tolist()
[{1, 2, 3, 4}, {1, 2}]
Run Code Online (Sandbox Code Playgroud)

但是,在具有900万行的csv文件上,这需要一些时间.因此,我想知道是否有更快的方法?我对使用pandas或直接在.csv文件上运行的任何解决方案感兴趣


首先,我要感谢你们,感谢您的精彩投入!我从我的真实数据中抽取了50000个OrderIds(以及相应的项目)的样本,并将几个方法应用于数据集.以下是结果

BenchmarkResults

请注意,我使用了pir程序的更新版本.因此,即使我们只考虑集合输出的列表,胜利者也是divakar.

在我的整个数据集中,他的快速设置方法持续时间为5.05秒,而他的基于列表的快速方法的持续时间仅为2.32秒.从最初的115秒开始,这是一个巨大的收获!再次感谢!

python performance list set pandas

4
推荐指数
1
解决办法
268
查看次数