我最近发现了大熊猫"分配"方法,我发现它非常优雅.我的问题是新列的名称被指定为关键字,因此它不能包含空格或破折号.
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) 我正在使用PyCharm专业版2018.1我通过ssh使用远程解释器.因此,当我使用Inspect Code的快捷方式时(例如,查看我在主脚本中使用的函数的来源),打开的选项卡是指远程服务器上的文件/system/remote_resources/.../...
这很烦人,因为这不是我需要修改的文件,因为它只是本地文件的临时副本,而且我已经碰巧修改了远程文件,这对执行没有影响.
有没有办法让PyCharm代码检查打开本地脚本,而不是远程拷贝?
这是我配置ssh连接的方式.没有设置路径映射.
我正在尝试生成依赖于小部件的交互式绘图.我遇到的问题是,当我使用滑块更改参数时,会在上一个之后完成新的绘图,而我预计只会根据参数更改一个绘图.
例:
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到最新版本.如果需要进一步的信息,请告诉我.)
有没有办法强制.plot
pandas Series 的方法生成新的图形,而不是尝试在当前打开的图形上绘制?
我目前使用plt.figure()
或使用并传递轴创建一个新图形,但对于从交互式控制台快速绘图,只需使用该方法而不需要额外的代码plt.subplots
行会很棒。.plot
我想知道 pandas 中是否有可以更改的配置来实现此目的。
是否有任何等效的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
不起作用
我有一个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)
不知道怎么解决这个问题?
任何人都可以帮助我理解两种方法之间的差异(如果有的话):df.mul
和df.rmul
?文档看起来完全相同:
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.mul.html#pandas.DataFrame.mul
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.rmul.html
使用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) 我对此很新,所以可能会有一个非常明显的答案.我很抱歉!
我正在通过一个集合绘制两个直方图.我希望我的每个子图都有相同的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.)
我有一个情节,其图例固定在右上角:如何展开图例以适应图表的高度?
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 ×10
pandas ×7
matplotlib ×4
assign ×1
columnname ×1
cut ×1
dataframe ×1
duplicates ×1
jupyter ×1
pycharm ×1
reindex ×1
sorting ×1