小编Grr*_*Grr的帖子

如何修改pandas中某些列的全文

我从pandas中的csv获得了一个相当大的数据帧.

问题是在某些列上我得到了一些文本字符串,我想隔离最后一个字符以将其转换为整数.

我找到了解决方案,但我相信它不是最有效的.它是这样的:

import pandas as pd

df = pd.read_csv("filename")

cols = list(df.loc[:, 'col_a':'column_s'])
df_filtered = df[cols].dropna()

df_filtered['col_o'] = df_filtered['col_o'].str[-1:]
df_filtered['col_p'] = df_filtered['col_p'].str[-1:]
df_filtered['col_q'] = df_filtered['col_q'].str[-1:]
df_filtered['col_r'] = df_filtered['col_r'].str[-1:]
df_filtered['col_s'] = df_filtered['col_s'].str[-1:]
Run Code Online (Sandbox Code Playgroud)

在写作方面,这并不是真正有效的.所以我尝试过这样的事情:

colstofilter = list(df_filtered.loc[:, 'col_o':'col_s'])

for col in df_filtered[colstofilter]:
    print(df_filtered[col].str[-1:].head())
Run Code Online (Sandbox Code Playgroud)

打印它给出了我想要的,但当我尝试将其转换为函数或lamba或将其应用于数据帧时,我得到一个错误,它不支持

python dataframe python-3.x pandas

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

scikit-learn中predict_proba的输出

假设我有一个数据样本,其中有两个类别标记为 0 和 1。当我运行 时output = clf.predict_proba(X_input), 中的每一行output由 2 列组成,对应于每个类别的概率。

第一列代表 0 类还是 1 类的概率?GradientBoostingClassier的predict_proba方法说:

“输入样本的类别概率。类别的顺序与属性classes_中的顺序相对应。”

这是否意味着数据样本的第一个元素(0 或 1)对应于 输出中的第一列predict_proba

python machine-learning scikit-learn

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

向 Pandas 数据透视表添加过滤器

我想向数据透视表添加过滤条件,如下所示:

(选择 v2 的值等于 'A')

pd.pivot_table(df,index=['v1'],columns=['v2'=='A'],values=['v3'],aggfunc='count')
Run Code Online (Sandbox Code Playgroud)

那可能吗?

python pivot-table pandas

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

从点云计算截断符号距离函数(TSDF)

我正在尝试在 matlab 中实现一个函数来计算截断的有符号距离函数,以便使用类似于本文中描述的方法从点云渲染体积模型。谁能帮我?提前致谢。

3d matlab computer-vision point-clouds

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

LogisticRegression scikit在培训中学习协变量(列)顺序问题

由于某些原因,协变量的顺序似乎与LogisticRegressionscikit-learn中的分类器有关,这对我来说似乎很奇怪.我有9个协变量和一个二进制输出,当我改变列的顺序和调用fit()然后调用predict_proba()输出是不同的.下面的玩具示例

logit_model = LogisticRegression(C=1e9, tol=1e-15)
Run Code Online (Sandbox Code Playgroud)

下列

logit_model.fit(df['column_2','column_1'],df['target'])
logit_model.predict_proba(df['column_2','column_1'])

array([[ 0.27387109,  0.72612891] ..])
Run Code Online (Sandbox Code Playgroud)

给出不同的结果:

logit_model.fit(df['column_1','column_2'],df['target'])
logit_model.predict_proba(df['column_1','column_2'])

array([[ 0.26117794,  0.73882206], ..])
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎很令人惊讶,但也许这就是我对算法内部和拟合方法缺乏了解.

我错过了什么?

编辑:这是完整的代码和数据

数据:https://s3-us-west-2.amazonaws.com/gjt-personal/test_model.csv

import pandas as pd
from sklearn.linear_model import LogisticRegression

df = pd.read_csv('test_model.csv',index_col=False)

columns1 =['col_1','col_2','col_3','col_4','col_5','col_6','col_7','col_8','col_9']
columns2 =['col_2','col_1','col_3','col_4','col_5','col_6','col_7','col_8','col_9']

logit_model = LogisticRegression(C=1e9, tol=1e-15)

logit_model.fit(df[columns1],df['target'])
logit_model.predict_proba(df[columns1])

logit_model.fit(df[columns2],df['target'])
logit_model.predict_proba(df[columns2])
Run Code Online (Sandbox Code Playgroud)

原来与之相关,tol=1e-15因为这会产生不同的结果.

LogisticRegression(C=1e9, tol=1e-15)
Run Code Online (Sandbox Code Playgroud)

但是这给出了相同的结果.

LogisticRegression(C=1e9)
Run Code Online (Sandbox Code Playgroud)

python python-3.x pandas scikit-learn logistic-regression

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

如何为多个数据框列创建管道?

我有 Dataframe 可以简化为:

import pandas as pd

df = pd.DataFrame([{
'title': 'batman',
'text': 'man bat man bat', 
'url': 'batman.com', 
'label':1}, 
{'title': 'spiderman',
'text': 'spiderman man spider', 
'url': 'spiderman.com', 
'label':1},
{'title': 'doctor evil',
 'text': 'a super evil doctor', 
'url': 'evilempyre.com', 
'label':0},])
Run Code Online (Sandbox Code Playgroud)

我想尝试不同的特征提取方法:TFIDF、word2vec、具有不同 ngram 设置的 Coutvectorizer 等。但我想尝试不同的组合:一个特征集将包含使用 TFIDF 转换的“文本”数据,以及使用Countvectoriser 和第二个将具有由 w2v 转换的文本数据,以及由 TFIDF 转换的“url”等。最后,当然,我想对不同的预处理策略进行比较并选择最好的一种。

以下是问题:

  1. 有没有办法使用 Pipeline 这样的标准 sklearn 工具来做这样的事情?

  2. 我的想法有常识吗?也许有一些好主意如何处理我所缺少的数据框中包含许多列的文本数据?

非常感谢!

python pandas scikit-learn

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

在熊猫的分类变量上使用groupby删除未使用的类别

根据“ 分类数据-操作”,默认情况下groupby将显示“未使用”类别:

In [118]: cats = pd.Categorical(["a","b","b","b","c","c","c"], categories=["a","b","c","d"])

In [119]: df = pd.DataFrame({"cats":cats,"values":[1,2,2,2,3,4,5]})

In [120]: df.groupby("cats").mean()
Out[120]: 
      values
cats        
a        1.0
b        2.0
c        4.0
d        NaN
Run Code Online (Sandbox Code Playgroud)

如何删除“未使用”类别的结果?例如

  values
cats        
a        1.0
b        2.0
c        4.0
Run Code Online (Sandbox Code Playgroud)

python pandas

5
推荐指数
2
解决办法
2160
查看次数

如何在 Pandas DataFrame 索引中获取每个月的最后一天(使用 TimeGrouper)

我有一个日期不完整的 DataFrame,我只需要每个月最后一天可用的日期/行。我尝试使用 TimeGrouper 并获取.last()每个组。

import pandas as pd
idx = [pd.datetime(2016,2,1),pd.datetime(2017,1,20),pd.datetime(2017,2,1),pd.datetime(2017,2,27)]
df = pd.DataFrame([1,2,3,4],index=idx)
df
        0
2016-02-01  1
2017-01-20  2
2017-02-01  3
2017-02-27  4
Run Code Online (Sandbox Code Playgroud)

期待:

df_eom
        0
2016-02-01  1
2017-01-20  2
2017-02-27  4
Run Code Online (Sandbox Code Playgroud)

但是我得到了这个:

df_eom = df.groupby(pd.TimeGrouper(freq='1M')).last()
df_eom
              0
2016-02-29  1.0
2016-03-31  NaN
2016-04-30  NaN
2016-05-31  NaN
2016-06-30  NaN
2016-07-31  NaN
2016-08-31  NaN
2016-09-30  NaN
2016-10-31  NaN
2016-11-30  NaN
2016-12-31  NaN
2017-01-31  2.0
2017-02-28  4.0
Run Code Online (Sandbox Code Playgroud)

它不仅创建了不在 df 中的日期,而且还更改了 df 第一行和最后一行的索引。我使用 TimeGrouper 错了吗?

python python-datetime pandas datetimeindex pandas-groupby

5
推荐指数
2
解决办法
7321
查看次数

带有部分文件名的 OSX find 命令

我知道在 osx 终端中该命令find . -name 'filename.type'会找到我并向我返回该名称的文件。但是,我想知道是否有任何命令可以用来搜索部分文件名。

例如。假设我有一堆按顺序命名为“IMG_01”、“IMG_02”等的图像。是否有一个命令可以让我在一个或多个目录中搜索文件名中包含“IMG”的所有文件?

macos terminal

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

将带有子图的熊猫图保存到一个文件

我正在从以下数据框在pandas / jupyter笔记本中创建子图

METHOD1       A           B             C              D             E
METHOD2                                                                
high       1410          14           426          13781             1
low       74142         303        757024          95105            37
medium    99174         670        277013         640000           127
mono      46599         207        405108          16793           160

axs = ct.plot(kind='barh', subplots=True, legend=False, figsize=(24,16))
for ax in axs:
    ax.set_xscale('log')
Run Code Online (Sandbox Code Playgroud)

在Jupyter中,我得到一张包含4个子图的图像。我想将该图保存为一个png,但是

fig=axs.get_figure()
fig.savefig('plot.png')
Run Code Online (Sandbox Code Playgroud)

给出错误信息

AttributeError:“ numpy.ndarray”对象没有属性“ get_figure”

因为axs是子图的数组,所以我可以保存单个子图。

如何将所有子图保存到一张图像?

python plot matplotlib pandas

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