小编FLa*_*Lab的帖子

pandas使用新列名称作为字符串进行分配

我最近发现了大熊猫"分配"方法,我发现它非常优雅.我的问题是新列的名称被指定为关键字,因此它不能包含空格或破折号.

df = DataFrame({'A': range(1, 11), 'B': np.random.randn(10)})
df.assign(ln_A = lambda x: np.log(x.A))
        A         B      ln_A
0   1  0.426905  0.000000
1   2 -0.780949  0.693147
2   3 -0.418711  1.098612
3   4 -0.269708  1.386294
4   5 -0.274002  1.609438
5   6 -0.500792  1.791759
6   7  1.649697  1.945910
7   8 -1.495604  2.079442
8   9  0.549296  2.197225
9  10 -0.758542  2.302585
Run Code Online (Sandbox Code Playgroud)

但是如果我想将新列命名为"ln(A)"呢?例如

df.assign(ln(A) = lambda x: np.log(x.A))
df.assign("ln(A)" = lambda x: np.log(x.A))


File "<ipython-input-7-de0da86dce68>", line 1
df.assign(ln(A) = lambda x: np.log(x.A))
SyntaxError: keyword …
Run Code Online (Sandbox Code Playgroud)

python columnname assign pandas

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

使用远程解释器进行Pycharm代码检查

我正在使用PyCharm专业版2018.1我通过ssh使用远程解释器.因此,当我使用Inspect Code的快捷方式时(例如,查看我在主脚本中使用的函数的来源),打开的选项卡是指远程服务器上的文件/system/remote_resources/.../...

这很烦人,因为这不是我需要修改的文件,因为它只是本地文件的临时副本,而且我已经碰巧修改了远程文件,这对执行没有影响.

有没有办法让PyCharm代码检查打开本地脚本,而不是远程拷贝?

这是我配置ssh连接的方式.没有设置路径映射.

在此输入图像描述

python pycharm

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

Jupyter Notebook:带有小部件的交互式情节

我正在尝试生成依赖于小部件的交互式绘图.我遇到的问题是,当我使用滑块更改参数时,会在上一个之后完成新的绘图,而我预计只会根据参数更改一个绘图.

例:

from ipywidgets import interact, interactive, fixed, interact_manual
import ipywidgets as widgets

import matplotlib.pyplot as plt
%matplotlib inline

import numpy as np

def plot_func(freq):
    x = np.linspace(0, 2*np.pi)
    y = np.sin(x * freq)
    plt.plot(x, y)

interact(plot_func, freq = widgets.FloatSlider(value=7.5,
                                               min=1,
                                               max=5.0,
                                               step=0.5))
Run Code Online (Sandbox Code Playgroud)

将滑块移动到4.0后,我有:

在此输入图像描述

虽然我只想在移动滑块时改变一个数字.我怎样才能做到这一点?

(我使用的是Python 2.7,matplotlib 2.0,我刚刚更新了笔记本和jupyter到最新版本.如果需要进一步的信息,请告诉我.)

python matplotlib jupyter jupyter-notebook

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

Pandas:默认在新图形上绘制系列

有没有办法强制.plotpandas Series 的方法生成新的图形,而不是尝试在当前打开的图形上绘制?

我目前使用plt.figure()或使用并传递轴创建一个新图形,但对于从交互式控制台快速绘图,只需使用该方法而不需要额外的代码plt.subplots行会很棒。.plot

我想知道 pandas 中是否有可以更改的配置来实现此目的。

python matplotlib pandas

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

列的pandas DataFrame reset_index?

是否有任何等效的pandas.DataFrame.reset_index对列进行操作并且能够处理重复列名称的情况?

显然我可以简单地为列分配新值,如果有像df.reset_index这样的方法,我想知道什么.

样本输入

 pd.DataFrame(np.random.rand(5, 3), columns = ['A', 'A', 'B'])

     A   A   B
0   0.5 0.3 0.9
1   0.7 0.9 0.3
2   0.9 0.4 0.8
3   0.6 0.2 0.9
4   0.7 0.4 0.6
Run Code Online (Sandbox Code Playgroud)

预期产出

     0   1   2
0   0.8 0.1 0.2
1   0.4 0.2 0.4
2   0.3 0.3 0.4
3   0.4 0.1 0.8
4   1.0 0.9 0.9
Run Code Online (Sandbox Code Playgroud)

其中0,1,2只是pandas的默认方式,用于命名无名称列.

当我有重复的列名时,现有方法喜欢pandas.DataFrame.reset_index()df.rename不起作用

python duplicates dataframe pandas reindex

8
推荐指数
2
解决办法
3857
查看次数

Pandas TimeGrouper on multiindex

我有一个multiIndex pandas数据帧,其中第一级索引是一个组,第二级索引是时间.我想要做的是,在每个组中,采用日内观察的平均值重新采样到每日频率.

import pandas as pd
import numpy as np

data = pd.concat([pd.DataFrame([['A']*72, list(pd.date_range('1/1/2011', periods=72, freq='H')), list(np.random.rand(72))], index = ['Group', 'Time', 'Value']).T,
                  pd.DataFrame([['B']*72, list(pd.date_range('1/1/2011', periods=72, freq='H')), list(np.random.rand(72))], index = ['Group', 'Time', 'Value']).T,
                  pd.DataFrame([['C']*72, list(pd.date_range('1/1/2011', periods=72, freq='H')), list(np.random.rand(72))], index = ['Group', 'Time', 'Value']).T],
                  axis = 0).set_index(['Group', 'Time'])
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止所尝试的:

daily_counts = data.groupby(pd.TimeGrouper('D'), level = ['Time']).mean()
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

TypeError: Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'MultiIndex'
Run Code Online (Sandbox Code Playgroud)

不知道怎么解决这个问题?

python pandas

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

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

从熊猫切割分类箱

使用pandas cut我可以通过提供边缘来定义bin,而pandas可以创建像bin这样的bin (a, b].

我的问题是如何对箱子进行分类(从最低到最高)?

import numpy as np
import pandas as pd

y = pd.Series(np.random.randn(100))

x1 = pd.Series(np.sign(np.random.randn(100)))
x2 = pd.cut(pd.Series(np.random.randn(100)), bins = [-3, -0.5, 0, 0.5, 3])

model = pd.concat([y, x1, x2], axis = 1, keys = ['Y', 'X1', 'X2'])
Run Code Online (Sandbox Code Playgroud)

我有一个中间结果,其中保留了箱的顺序

int_output = model.groupby(['X1', 'X2']).mean().unstack()
int_output.columns = int_output.columns.get_level_values(1)

X2    (-3, -0.5]  (-0.5, 0]  (0, 0.5]  (0.5, 3]
X1                                             
-1.0    0.101475  -0.344419 -0.482992 -0.015179
 1.0    0.249961   0.484757 -0.066383 -0.249414
Run Code Online (Sandbox Code Playgroud)

但后来我做了其他任意改变垃圾箱顺序的操作:

output = pd.concat(int_output.to_dict('series'), axis = 1)

      (-0.5, …
Run Code Online (Sandbox Code Playgroud)

python sorting cut pandas

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

设置直方图pandas的轴标签

我对此很新,所以可能会有一个非常明显的答案.我很抱歉!

我正在通过一个集合绘制两个直方图.我希望我的每个子图都有相同的x和y标签以及一个共同的标题.我明白sharex = True会做的伎俩,但显然不是我只在df.hist之后设置轴.我已经尝试了各种版本的设置xlabels并且现在丢失了.

import pylab as pl
from pandas import *

histo_survived = df.groupby('Survived').hist(column='Age', sharex=True, sharey=True)
pl.title("Histogram of Ages")
pl.xlabel("Age")
pl.ylabel("Individuals")
Run Code Online (Sandbox Code Playgroud)

所以我最终得到的只是子图的标签.

Out: <matplotlib.text.Text at 0x11a27ead0>
Run Code Online (Sandbox Code Playgroud)

我的直方图的截图

关于如何解决这个问题的任何想法?(必须使用pandas/python.)

python matplotlib pandas

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

Matplotlib:垂直展开图例

我有一个情节,其图例固定在右上角:如何展开图例以适应图表的高度?

borderaxespad=0. 会水平扩展它,但我找不到相当于垂直扩展它.

我正在使用matplotlib 2.0

示例代码:

import numpy as np

x = np.linspace(0, 2*np.pi, 100)
data = [np.sin(x * np.pi/float(el)) for el in range(1, 5)]

fig, ax = plt.subplots(1)
for key, el in enumerate(data):
    ax.plot(x, el, label=str(key))
ax.legend(bbox_to_anchor=(1.04,1), loc="upper left", borderaxespad=0., mode='expand')
plt.tight_layout(rect=[0,0,0.8,1])
Run Code Online (Sandbox Code Playgroud)

哪个产生:

在此输入图像描述

python matplotlib

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