在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原则(如果我理解正确),我不想在这里检查类型,对吗?任何提示(也在代码示例上)都是受欢迎的.
我正在探索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)
这并不奇怪,这会产生错误.
所以这里的问题是我需要测试集中包含的一些信息.有没有一种好方法将其包含在管道中?
我有一个具有250.000行但140列的数据框,并且正在尝试构建对图。的变量。我知道子图的数量巨大,而且绘制所需的时间也很多。(我在配备3,4 GHZ和32 GB RAM的i5上等待了一个多小时)。
记得scikit learning允许并行构建随机森林,我正在检查seaborn是否也可以这样做。但是,我什么也没找到。源代码似乎为每个图像调用了matplotlib plot函数。
这不能并行化吗?如果是,那么从这里开始的好方法是什么?
我正在使用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)
所以出现的问题如下:
我想知道是否可以在 scikit-learn 的管道中包含 scikit-learn 异常值检测,例如隔离森林?
所以这里的问题是我们只想在训练数据上拟合这样的对象,而在测试数据上什么都不做。特别是,人们可能想在这里使用交叉验证。
解决方案如何?
构建一个继承自 TransformerMixin(以及用于 ParameterTuning 的 BaseEstimator)的类。现在定义一个 fit_transform 函数,用于存储该函数是否已被调用的状态。如果尚未调用,则该函数会拟合并预测数据上的异常值函数。如果之前已经调用过该函数,则已经对训练数据调用了异常值检测,因此我们假设我们现在找到了我们简单返回的测试数据。
这种方法有机会奏效还是我在这里遗漏了什么?
假设我有下表的客户数据
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.如果没有,我可以想象一些解决方法,但它们非常长.还有其他建议吗?
我有一个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(以及相应的项目)的样本,并将几个方法应用于数据集.以下是结果
请注意,我使用了pir程序的更新版本.因此,即使我们只考虑集合输出的列表,胜利者也是divakar.
在我的整个数据集中,他的快速设置方法持续时间为5.05秒,而他的基于列表的快速方法的持续时间仅为2.32秒.从最初的115秒开始,这是一个巨大的收获!再次感谢!
python ×6
pandas ×3
performance ×2
python-3.x ×2
scikit-learn ×2
dataframe ×1
docstring ×1
list ×1
outliers ×1
pivot-table ×1
raise ×1
seaborn ×1
set ×1
sql ×1