小编GPB*_*GPB的帖子

熊猫写CSV - 追加与写

如果"filename"不存在,我想使用pd.write_csv写"filename"(带标题),否则如果存在则附加到"filename".如果我只是使用命令:

     df.to_csv('filename.csv',mode = 'a',header ='column_names')
Run Code Online (Sandbox Code Playgroud)

写入或追加成功,但似乎每次发生追加时都会写入标题.

如果文件不存在,我怎么才能添加标题,如果文件存在则不添加标题?

python csv pandas

34
推荐指数
4
解决办法
4万
查看次数

使用GridSearchCV与AdaBoost和DecisionTreeClassifier

我正在尝试使用DecisionTreeClassifier("DTC")作为base_estimator来调整AdaBoost分类器("ABT").我想调 ABT同时DTC参数,但我不知道如何做到这一点-管道不应该工作,因为我不是"管" DTC的输出ABT.我们的想法是在GridSearchCV估算器中迭代ABT和DTC的超参数.

如何正确指定调整参数?

我尝试了以下操作,在下面生成了一个错误.

[IN]
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import AdaBoostClassifier
from sklearn.grid_search import GridSearchCV

param_grid = {dtc__criterion : ["gini", "entropy"],
              dtc__splitter :   ["best", "random"],
              abc__n_estimators: [none, 1, 2]
             }


DTC = DecisionTreeClassifier(random_state = 11, max_features = "auto", class_weight = "auto",max_depth = None)

ABC = AdaBoostClassifier(base_estimator = DTC)

# run grid search
grid_search_ABC = GridSearchCV(ABC, param_grid=param_grid, scoring = 'roc_auc')

[OUT]
ValueError: Invalid parameter dtc for estimator AdaBoostClassifier(algorithm='SAMME.R',
      base_estimator=DecisionTreeClassifier(class_weight='auto', criterion='gini', max_depth=None,
        max_features='auto', max_leaf_nodes=None, min_samples_leaf=1,
        min_samples_split=2, min_weight_fraction_leaf=0.0,
        random_state=11, …
Run Code Online (Sandbox Code Playgroud)

python decision-tree adaboost scikit-learn grid-search

24
推荐指数
2
解决办法
2万
查看次数

Scikit-learn - 使用RFECV和GridSearch减少功能.系数存储在哪里?

我正在使用Scikit-learn RFECV为使用交叉验证的逻辑回归选择最重要的特征.假设X是特征的[n,x]数据帧,y代表响应变量:

from sklearn.pipeline import make_pipeline
from sklearn.grid_search import GridSearchCV
from sklearn.cross_validation import StratifiedKFold
from sklearn import preprocessing
from sklearn.feature_selection import RFECV
import sklearn
import sklearn.linear_model as lm
import sklearn.grid_search as gs

#  Create a logistic regression estimator 
logreg = lm.LogisticRegression()

# Use RFECV to pick best features, using Stratified Kfold
rfecv =   RFECV(estimator=logreg, cv=StratifiedKFold(y, 3), scoring='roc_auc')

# Fit the features to the response variable
rfecv.fit(X, y)

# Put the best features into new df X_new
X_new = rfecv.transform(X)

# …
Run Code Online (Sandbox Code Playgroud)

python scikit-learn

16
推荐指数
2
解决办法
1万
查看次数

Statsmodels - 广播形状不同?

我正在尝试使用 statsmodels 中的 logit 模块对包含布尔值(“默认”)目标变量和两个特征(“fico_interp”、“home_ownership_int”)的数据集执行逻辑回归。所有三个值都来自同一数据框“traindf”:

from sklearn import datasets
import statsmodels.formula.api as smf

lmf = smf.logit('default ~ fico_interp + home_ownership_int',traindf).fit()
Run Code Online (Sandbox Code Playgroud)

这会生成一条错误消息:

ValueError:操作数无法与形状一起广播 (40406,2) (40406,)

怎么会发生这种事呢?

python statsmodels

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

Python函数返回错误

我正在编写一个python函数,它使用两个大小相等的数组[n,1].在执行任何计算之前,我想检查以确保长度相同,如果不是,则返回错误.什么是最佳做法?

def do_some_stuff(array1, array2): 
# Before doing stuff, check to ensure both arrays have the same length

if len(array1) != len(array2):
#  Break and return with error
Run Code Online (Sandbox Code Playgroud)

我很困惑,因为我想打破并返回错误代码(比如-1).似乎break将返回没有任何值,返回将继续执行该函数?或者Return是否会突破任何剩余的代码?

python error-handling break

6
推荐指数
2
解决办法
4万
查看次数

Matplotlib - 如何为一系列图设置ylim()?

我有一系列我试图制作的箱形图,每个都有不同的范围.我尝试通过确定每个单独系列的最大值和最小值来设置ylim.然而,在许多情况下,min是异常值,因此绘图是压缩的.如何选择图表"胡须"使用的相同限制(加上小幅度)?

例如,现在我这样做:

[In]
ax = df['feature'].boxplot()
ymax = max(df['feature']
ymin = min(df['feature']
ax.set_ylim([ymax,ymin])
Run Code Online (Sandbox Code Playgroud)

我想将ymax,ymin设置为盒子图的胡须.

python matplotlib boxplot

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

Python - 生成符合标准的大型集合组合的最有效方法?

我试图在受边界条件约束的投资组合中生成所有可能的金融工具组合。

例如,假设我有一组列表,这些列表代表对投资组合的分配,受每种工具的总投资组合规模的最小和最大百分比影响:

"US Bonds" = {0.10,0.15,0.20,0.25,0.30}
"US Equities" = {0.25, 0.30, 0.35, 0.40, 0.45, 0.50}
"European Bonds" = {0.10, 0.15, 0.20}
"European Equities = {0.20,0.25,0.30,0.35,0.40,0.45,0.50}
 ...
"Cash" = {0.0, 0.05, 0.10, 0.15,...0.95}
Run Code Online (Sandbox Code Playgroud)

我的资产清单如下所示:

[In]
Asset

[Out]
[[0.1, 0.15, 0.2, 0.25, 0.30],
[0.25, 0.30,0.35, 0.40, 0.45, 0.50],
[0.1, 0.15, 0.2],
[0.20, 0.25, 0.30,0.35, 0.40, 0.45, 0.50]
...
[0.0, 0.05, 0.1, 0.15, 0.2, 0.25,...0.95]]
Run Code Online (Sandbox Code Playgroud)

在每种工具组合之和必须 = 1 的条件下,生成所有可能的投资组合的最有效方法是什么?

现在,我正在创建一个“投资组合”列表,如下所示:

portfolios  = [item for item in itertools.product(*asset) if  np.isclose(sum(item),1)]
Run Code Online (Sandbox Code Playgroud)

(注意,'np.isclose' 负责处理时髦的 fp 算术)。 …

python combinations numpy combinatorics

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

使用Matplotlib在两个y轴上绘制多条线

我试图在两个y轴上绘制具有不同范围的多个特征.每个轴可能包含多个功能.下面的代码片段包括对象"Prin Balances",它是一个df,其中包含按日期索引的数据类型."欠款状态"是包含Prin Balances列标题子集的列表.

Delinquent_States = ['1 Mos','2 Mos','3 Mos','> 3 Mos']
fig, ax = plt.subplots()
plt.plot(Prin_Balances['UPB'], '--r', label='UPB')
plt.legend()
ax.tick_params('Bal', colors='r')

# Get second axis
ax2 = ax.twinx()
plt.plot(Prin_Balances[Delinquent_States],  label=Delinquent_States)
plt.legend()
ax.tick_params('vals', colors='b')
Run Code Online (Sandbox Code Playgroud)

我的输出需要清理,尤其是传说.

在此输入图像描述

欢迎任何建议.

python matplotlib

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

Python/Pandas - 在使用'describe'时如何避免省略号

我在iPython笔记本中打开了一个具有许多功能的文件(~14.5k观测值,~2000个特征).使用df.describe时,输出使用省略号来概括功能.如何将所有行的描述输出到文件?

[In]
url = "some large file"
df = pd.read_csv(url)
df.describe()

[Out]
       Col 1    Col 2    Col 3    Col 4   ...  Col 1998   Col 1999   Col 2000
mean   Blah     Blah     Blah     Blah    ...  Blah       Blah       Blah
std
min 
etc
Run Code Online (Sandbox Code Playgroud)

我以为我可以通过将输出写入文件来避免省略号:

[In]
url1 = "Some output file"
f = open(url1, 'w')
f.write(str(df.describe()))
f.close()
Run Code Online (Sandbox Code Playgroud)

但该文件看起来与输出相同.

python file-io pandas

3
推荐指数
1
解决办法
1880
查看次数

如何使这个循环更有效?

我有一个约50万贷款的历史收集,其中一些已经违约,有些则没有.我的数据框是lcd_temp. lcd_temp有贷款规模(loan_amnt),贷款是否违约(Total Defaults),年贷款利率(clean_rate),贷款期限(clean_term)和从发货到默认(mos_to_default)的月份的信息. mos_to_default等于clean_term没有默认值.

我想计算cum_cf每笔贷款的累积现金流[ ],作为所有优惠券的总和,直到违约加上(1 - 严重性),如果贷款违约,简单地loan_amnt说它是否按时还款.

这是我的代码,需要花费很长时间才能运行:

severity = 1

for i in range (0,len(lcd_temp['Total_Defaults'])-1):
    if (lcd_temp.loc[i,'Total_Defaults'] ==1):
    # Default, pay coupon only until time of default, plus (1-severity)
        lcd_temp.loc[i,'cum_cf'] = ((lcd_temp.loc[i,'mos_to_default'] /12)  * lcd_temp.loc[i,'clean_rate'])+(1 severity)*lcd_temp.loc[i,'loan_amnt']
    else: 
    # Total cf is sum of coupons (non compounded) + principal 
        lcd_temp.loc[i,'cum_cf'] = (1+lcd_temp.loc[i,'clean_term']/12* lcd_temp.loc[i,'clean_rate'])*lcd_temp.loc[i,'loan_amnt']
Run Code Online (Sandbox Code Playgroud)

欢迎任何关于提高速度的想法或建议(到目前为止需要一个多小时)!

python performance pandas

2
推荐指数
1
解决办法
100
查看次数

Numpy - 计算对角线的乘积

新手问题:假设我有一个矩阵 A,是否有一个 numpy 函数可以计算 A 的对角线元素的乘积?

例如:

在此输入图像描述

其中,X(i,i) 是矩阵的对角积。

python numpy matrix

2
推荐指数
1
解决办法
3764
查看次数

“KNeighborsClassifier”对象不可调用

我有一个特征集 Xtrain 与维度 (n_obs,n_features) 和响应 ytrain 与 dim (n_obs) 。我正在尝试使用 KNN 作为分类器。

from sklearn.neighbors import KNeighborsClassifier
neigh = KNeighborsClassifier()
clf = neigh(n_neighbors = 10)
clf.fit(Xtrain,ytrain)
Run Code Online (Sandbox Code Playgroud)

我收到错误消息:


TypeError
Traceback(最近一次调用最后一次)

 22 clf = neigh(n_neighbors = 10)
 23 # Fit best model to data
 24 clf.fit(Xtrain, ytrain)
Run Code Online (Sandbox Code Playgroud)

类型错误:“KNeighborsClassifier”对象不可调用

不知道问题是什么......任何帮助表示赞赏。

python knn scikit-learn

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

Python-熊猫描述了抛出错误:无法散列的类型“ dict”

更新:我正在使用“ Socrata开源API”中的一些示例代码。我在代码中注意到以下注释:

# First 2000 results, returned as JSON from API / converted to Python 
# list of dictionaries by sodapy.
Run Code Online (Sandbox Code Playgroud)

我不熟悉JSON。

我已经下载了一个数据集,并创建了一个包含大量列的DataFrame'df'。

df = pd.DataFrame.from_records(results)
Run Code Online (Sandbox Code Playgroud)

当我尝试使用describe()方法时,出现“ TypeError:无法散列的类型:'dict'”:

df.describe()
...
TypeError: unhashable type: 'dict'
Run Code Online (Sandbox Code Playgroud)

如何识别产生此错误的列?

更新2:根据Yuca的要求,我提供了df的摘录:

在此处输入图片说明

python json pandas socrata

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