我确信这很简单,但作为python的完全新手,我无法弄清楚如何迭代pandas
数据框中的变量并对每个变量运行回归.
这是我正在做的事情:
all_data = {}
for ticker in ['FIUIX', 'FSAIX', 'FSAVX', 'FSTMX']:
all_data[ticker] = web.get_data_yahoo(ticker, '1/1/2010', '1/1/2015')
prices = DataFrame({tic: data['Adj Close'] for tic, data in all_data.iteritems()})
returns = prices.pct_change()
Run Code Online (Sandbox Code Playgroud)
我知道我可以运行这样的回归:
regs = sm.OLS(returns.FIUIX,returns.FSTMX).fit()
Run Code Online (Sandbox Code Playgroud)
但是假设我想为数据框中的每一列执行此操作.特别是,我想在FSTMX上退回FIUIX,然后在FSTMX上退回FSAIX,然后在FSTMX上退回FSAVX.在每次回归之后我想存储残差.
我已经尝试了以下各种版本,但我必须得到错误的语法:
resids = {}
for k in returns.keys():
reg = sm.OLS(returns[k],returns.FSTMX).fit()
resids[k] = reg.resid
Run Code Online (Sandbox Code Playgroud)
我认为问题是我不知道如何按键引用返回列,所以returns[k]
可能是错误的.
任何关于最佳方法的指导都将非常感激.也许我缺少一种常见的熊猫方法.
我需要在标识符和条件上合并两个pandas数据帧,其中一个数据帧中的日期在另一个数据帧中的两个日期之间.
Dataframe A有一个日期("fdate")和一个ID("cusip"):
我需要将此与此数据帧B合并:
在A.cusip==B.ncusip
和A.fdate
之间B.namedt
和B.nameenddt
.
在SQL中这将是微不足道的,但我能看到如何在pandas中执行此操作的唯一方法是首先在标识符上无条件合并,然后在日期条件上进行过滤:
df = pd.merge(A, B, how='inner', left_on='cusip', right_on='ncusip')
df = df[(df['fdate']>=df['namedt']) & (df['fdate']<=df['nameenddt'])]
Run Code Online (Sandbox Code Playgroud)
这真的是最好的方法吗?似乎如果可以在合并中进行过滤以避免在合并之后但在过滤器完成之前具有可能非常大的数据帧,则会好得多.
我需要将第一列中除第一列以外的所有列除以第一列.
这就是我正在做的事情,但我想知道这不是"正确"的熊猫方式:
df = pd.DataFrame(np.random.rand(10,3), columns=list('ABC'))
df[['B', 'C']] = (df.T.iloc[1:] / df.T.iloc[0]).T
Run Code Online (Sandbox Code Playgroud)
有办法做某事df[['B','C']] / df['A']
吗?(这只是给出10x12的数据帧nan
.)
此外,在阅读了一些关于SO的类似问题之后,我尝试了df['A'].div(df[['B', 'C']])
但是这会产生广播错误.
我正在寻找一种使用正则表达式进行模糊匹配的方法.我想使用Perl,但是如果有人可以推荐任何方式来做这个会有所帮助.
作为一个例子,我想匹配一个字母"纽约",前面加一个2位数.之所以遇到困难是因为文本是来自PDF的OCR,所以我想进行模糊匹配.我想要匹配:
12 New York
24 Hew York
33 New Yobk
Run Code Online (Sandbox Code Playgroud)
和其他"近距离"比赛(在Levenshtein距离意义上),但不是:
aa New York
11 Detroit
Run Code Online (Sandbox Code Playgroud)
显然,我需要指定匹配的允许距离("模糊").
据我了解,我不能使用String::Approx
Perl模块来执行此操作,因为我需要在匹配中包含正则表达式(以匹配前面的数字).
另外,我应该注意到这是我真正想要匹配的一个非常简单的例子,所以我不是在寻找一种蛮力的方法.
编辑添加:
好的,我的第一个例子太简单了.我并不是说人们会挂在前面的数字上 - 抱歉这个坏例子.这是一个更好的例子.考虑这个字符串:
ASSIGNOR, BY MESHS ASSIGN1IBNTS, TO ALUSCHALME&S MANOTAC/rURINGCOMPANY, A COBPOBATlOH OF DELAY/ABE.
这实际上是说:
ASSIGNOR, BY MESNE ASSIGNMENTS, TO ALLIS-CHALMERS MANUFACTURING COMPANY, A CORPORATION OF DELAWARE
我需要做的是提取短语"ALUSCHALME&S MANOTAC/rURINGCOMPANY"和"DELAY/ABE".(我意识到这可能看起来像疯了.但我是一个乐观主义者.)一般来说,模式看起来像这样:
/Assignor(, by mesne assignments,)? to (company name), a corporation of (state)/i
匹配是模糊的.
这段代码是将文件内容读入Perl变量的好方法吗?它有效,但我很好奇我是否应该使用更好的练习.
open INPUT, "input.txt";
undef $/;
$content = <INPUT>;
close INPUT;
$/ = "\n";
Run Code Online (Sandbox Code Playgroud) 我有一个带有一个可选参数的函数,如下所示:
def funA(x, a, b=1):
return a+b*x
Run Code Online (Sandbox Code Playgroud)
我想编写一个调用的新函数,funA
并且还有一个可选参数,但是如果没有传递参数,我想保留默认值funA
.
我在想这样的事情:
def funB(x, a, b=None):
if b:
return funA(x, a, b)
else:
return funA(x, a)
Run Code Online (Sandbox Code Playgroud)
有更多的pythonic方式吗?
我有一个大的XML文件(~18MB).显然,其中有一个标签没有关闭.我知道这是因为当我运行W3C标记验证工具(validator.w3.org)时,我收到以下错误:
You may have neglected to close an element, or perhaps you meant to "self-close" an element, that is, ending it with "/>" instead of ">".
我的问题是如何在文件中的500,000行中找到这个缺失的封闭元素.是否有一个我可以使用的工具可以建议可能存在问题的地方 - 比如在一定数量的线后没有关闭的元素?
任何想法将不胜感激.
我正在学习python,并且遇到了这个我以前见过的模型模拟的例子.其中一个功能看起来不必要很长,所以我认为尝试提高效率是一种好习惯.我的尝试,虽然需要更少的代码,大约快1/60.是的,我做了60倍.
我的问题是,我哪里出错了?我已经尝试计算函数的各个部分,但没有看到瓶颈在哪里.
这是原始功能.这是一个人们生活在网格上的模型,他们的幸福取决于他们是否与大多数邻居一样.(这是谢林的隔离模型.)所以我们给一个人一个x,y坐标,并通过检查他们每个邻居的种族来确定他们的幸福.
def is_unhappy(self, x, y):
race = self.agents[(x,y)]
count_similar = 0
count_different = 0
if x > 0 and y > 0 and (x-1, y-1) not in self.empty_houses:
if self.agents[(x-1, y-1)] == race:
count_similar += 1
else:
count_different += 1
if y > 0 and (x,y-1) not in self.empty_houses:
if self.agents[(x,y-1)] == race:
count_similar += 1
else:
count_different += 1
if x < (self.width-1) and y > 0 and (x+1,y-1) not in …
Run Code Online (Sandbox Code Playgroud) 我正在寻找有关Perl grep
功能如何工作的一些细节.我这样做:
if ( grep{ $foo == $_ } @bar ) {
some code;
}
Run Code Online (Sandbox Code Playgroud)
假设@bar
很大(数十万个元素).对于我的数据,如果我排序@bar
,则值$foo
更可能出现在数组的开头附近而不是接近结尾.我想知道这是否有助于提高性能.
换句话说,使用上面的代码,确实grep
按顺序移动@bar
检查是否$foo == $_
一旦发现任何值为真,然后立即退出?或者它会@bar
在返回值之前检查每个元素吗?
使用大熊猫,我创建了一个时间序列图,如下所示:
import numpy as np
import pandas as pd
rng = pd.date_range('2016-01-01', periods=60, freq='D')
ts = pd.Series(np.random.randn(len(rng)), index=rng)
ax = ts.plot()
ax.axhline(y=ts.mean(), xmin=-1, xmax=1, color='r', linestyle='--', lw=2)
Run Code Online (Sandbox Code Playgroud)
我想仅使用2月份的数据在平均值的水平上添加另一条水平线。平均值是ts.loc['2016-02']
,但是如何在不包含整个数字的水平上添加一条水平线,而仅针对2月的日期?
python ×6
pandas ×4
perl ×3
date-range ×1
filehandle ×1
grep ×1
join ×1
performance ×1
profiler ×1
regex ×1
slurp ×1
statsmodels ×1
timespan ×1
xml ×1