我正在尝试做一些在熊猫中应该非常简单的事情,但它似乎不过了.我正在尝试将列添加到现有的pandas数据帧,该数据帧是基于另一个(现有)列的映射值.这是一个小测试用例:
import pandas as pd
equiv = {7001:1, 8001:2, 9001:3}
df = pd.DataFrame( {"A": [7001, 8001, 9001]} )
df["B"] = equiv(df["A"])
print(df)
Run Code Online (Sandbox Code Playgroud)
我希望以下结果:
A B
0 7001 1
1 8001 2
2 9001 3
Run Code Online (Sandbox Code Playgroud)
相反,我得到一个错误告诉我,equiv不是一个可调用的函数.很公平,它是一本字典,但即使我将它包装在一个函数中,我仍然会感到沮丧.所以我尝试使用似乎与其他操作一起使用的map函数,但它也被使用字典击败了:
df["B"] = df["A"].map(lambda x:equiv[x])
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我只得到KeyError:8001.我已经阅读了文档和以前的帖子,但还没有发现任何暗示如何将字典与pandas数据帧混合的内容.任何建议将不胜感激.
我正在尝试使用python SimpleHTTPServer构建一个简单的REST服务器.我在发布消息时遇到问题.如果我做得对,请告诉我.
from SimpleHTTPServer import SimpleHTTPRequestHandler
import SocketServer
import simplejson
class S(SimpleHTTPRequestHandler):
def _set_headers(self):
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
def do_GET(self):
print "got get request %s" % (self.path)
if self.path == '/':
self.path = '/index.html'
return SimpleHTTPRequestHandler.do_GET(self)
def do_POST(self):
print "got post!!"
content_len = int(self.headers.getheader('content-length', 0))
post_body = self.rfile.read(content_len)
test_data = simplejson.loads(post_body)
print "post_body(%s)" % (test_data)
return SimpleHTTPRequestHandler.do_POST(self)
def run(handler_class=S, port=80):
httpd = SocketServer.TCPServer(("", port), handler_class)
print 'Starting httpd...'
httpd.serve_forever()
Run Code Online (Sandbox Code Playgroud)
index.html文件
<html>
<title>JSON TEST PAGE</title>
<head>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript"> …Run Code Online (Sandbox Code Playgroud) 在比较两个系列时,我遇到了大熊猫的意外行为.我想知道这是故意还是错误.
假设我:
import pandas as pd
x = pd.Series([1, 1, 1, 0, 0, 0], index=['a', 'b', 'c', 'd', 'e', 'f'], name='Value')
y = pd.Series([0, 2, 0, 2, 0, 2], index=['c', 'f', 'a', 'e', 'b', 'd'], name='Value')
x > y
Run Code Online (Sandbox Code Playgroud)
收益率:
a True
b False
c True
d False
e False
f False
Name: Value, dtype: bool
Run Code Online (Sandbox Code Playgroud)
这不是我想要的.很明显,我预计索引会排成一行.但我必须明确排列它们才能获得理想的结果.
x > y.reindex_like(x)
Run Code Online (Sandbox Code Playgroud)
收益率:
a True
b True
c True
d False
e False
f False
Name: Value, dtype: bool
Run Code Online (Sandbox Code Playgroud)
这是我的预期.
更糟糕的是,如果我:
x …Run Code Online (Sandbox Code Playgroud) 在单一测试中,我需要检查数组值的分布是否一致.例如:
在数组中= [1, 0, 1, 0, 1, 1, 0, 0]
存在均匀的值分布.由于有四个"1"和四个"0"
对于较大长度的阵列,分布更"均匀"
如何证明正在测试的阵列具有均匀分布?
注意:数组是用random.randint(min,max,len)from 创建的numpy.random
正如文件所述:
这被称为负面的后观断言.与正向lookbehind断言类似,包含的模式必须仅匹配某些固定长度的字符串.
所以这将起作用,意图是匹配任何,外部{},但不是内部{}:
In [188]:
re.compile("(?<!\{)\,.").findall('a1,a2,a3,a4,{,a6}')
Out[188]:
[',a', ',a', ',a', ',{']
Run Code Online (Sandbox Code Playgroud)
这将是一个稍微不同的查询:
In [189]:
re.compile("(?<!\{a5)\,.").findall('a1,a2,a3,a4,{a5,a6}')
#or this: re.compile("(?<!\{..)\,.").findall('a1,a2,a3,a4,{a5,a6}')
Out[189]:
[',a', ',a', ',a', ',{']
In [190]:
Run Code Online (Sandbox Code Playgroud)
但是,如果查询是'a1,a2,a3,a4,{_some_length_not_known_in_advance,a6}',根据该文档,以下将无法按预期工作:
In [190]:
re.compile("(?<![\{.*])\,.").findall('a1,a2,a3,a4,{a5,a6}')
Out[190]:
[',a', ',a', ',a', ',{', ',a']
Run Code Online (Sandbox Code Playgroud)
实现这个的任何替代方案?消极的看法是错误的做法吗?
任何原因这都是为什么lookbehind被设计为首先(只匹配一些固定长度的字符串)?
我试图使用Python的scipy.optimize最大化以下功能.然而,经过大量的尝试,它似乎没有用.该函数和我的代码粘贴在下面.谢谢你的帮助!
问题
Maximize [sum (x_i / y_i)**gamma]**(1/gamma)
subject to the constraint sum x_i = 1; x_i is in the interval (0,1).
Run Code Online (Sandbox Code Playgroud)
x是一个选择变量的向量; y是参数的矢量; gamma是一个参数.在x小号必须总和为1.每个x必须在区间(0,1).
码
def objective_function(x, y):
sum_contributions = 0
gamma = 0.2
for count in xrange(len(x)):
sum_contributions += (x[count] / y[count]) ** gamma
value = math.pow(sum_contributions, 1 / gamma)
return -value
cons = ({'type': 'eq', 'fun': lambda x: np.array([sum(x) - 1])})
y = [0.5, 0.3, 0.2]
initial_x = [0.2, 0.3, 0.5] …Run Code Online (Sandbox Code Playgroud) 我有一些我在R中编写的代码,我想将其翻译成Python,但我是python的新手,所以需要一些帮助
R代码基本上模拟250个随机法线,然后计算排序的几何平均回报,然后计算最大亏损,它执行10000次然后组合结果,如下所示.
mu <- 0.06
sigma <- 0.20
days <- 250
n <- 10000
v <- do.call(rbind,lapply(seq(n),function(y){
rtns <- rnorm(days,mu/days,sqrt(1/days)*sigma)
p.rtns <- cumprod(rtns+1)
p.rtns.md <- min((p.rtns/cummax(c(1,p.rtns))[-1])-1)
tot.rtn <- p.rtns[days]-1
c(tot.rtn,p.rtns.md)
}))
Run Code Online (Sandbox Code Playgroud)
这是我在Python中的尝试,(如果你可以让它更短/更有说服力/更高效请建议作为答案)
import numpy as np
import pandas as pd
mu = float(0.06)
sigma = float(0.2)
days = float(250)
n = 10000
rtns = np.random.normal(loc=mu/days,scale=(((1/days)**0.5)*sigma),size=days)
rtns1 = rtns+1
prtns = rtns1.cumprod()
totrtn = prtns[len(prtns)-1] -1
h = prtns.tolist()
h.insert(0,float(1))
hdf = pd.DataFrame(prtns)/(pd.DataFrame(h).cummax()[1:len(h)]-1))[1:len(h)]]
Run Code Online (Sandbox Code Playgroud)
这就是我得到的...不太确定是否hdf正确得到p.rtns.md,并且不确定我将如何模拟这10000次.
所有建议将不胜感激......
当我尝试拟合我的数据时,结果有点奇怪,我不明白为什么?获得的拟合是平坦的,并且第一个输入e = 0.似乎在某处产生了分裂错误.唯一的工作案例是我修改e [0] = 1.0e-9
结果如下:

从这里的例子可以看出,我的例子并不是我所读的那么远,但我仍然陷入困境,所以你能帮我解决一下我的情况出了什么问题吗?
import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
src_s = np.array((45.59,50.66664,59.74871,65.71018,72.76012,79.06256,84.13755,90.39944,
96.33653,101.65667,106.27968,110.76301,114.41808,117.21922,120.51836))
src_e = np.array((0.0,0.00126,0.00503,0.00804,0.01228,0.01685,0.02127,0.02846,0.03666,
0.04581,0.05620,0.06882,0.08005,0.09031,0.10327))
# plot source data
plt.plot(src_e, src_s, 'o')
# fitting function
def sigma(e, k ,n): return k*(e**n)
# find parameters curve fitting
param, var = curve_fit(sigma, src_e, src_s)
new_e = np.linspace(src_e.min(), src_e.max(), 50)
plt.plot(new_e, sigma(new_e, *param))
# modify first input
src_e[0]=1.0e-9
# relaunch parameters curve fitting
param, var = curve_fit(sigma, src_e, …Run Code Online (Sandbox Code Playgroud) 在使用子图和单个图时,我在matplotlib中对函数的微妙差异(就是它们被称为是什么?)感到非常困惑.
举个例子:
如果我想在单个数字上更改xlim,我会这样做: plt.xlim()
如果我想在子图上更改xlim,我会这样做: ax.set_xlim()
为什么是这样?任何人都可以将我发送到解释惯例的网站吗?这是一个简单的例子,因为我知道它们是不同的,以及如何,但有许多我不知道的,我很难搞清楚 - 例如:
1)将集合应用于子图:ax.collection(collection_name).你是如何为一个人物做的?
2)将刻度标签应用于子图:ax.xaxis.ticklabels(tick_labels).你如何为一个人物做这个?
对不起,这是一个新问题!
我正在使用seabornpairplot来绘制几个自变量与因变量的关系图。
import seaborn as sns
iris = sns.load_dataset("iris")
x_vars = ['sepal_length', 'sepal_width', 'petal_length']
y_vars = ['petal_width']
pp = sns.pairplot(data=iris, x_vars=x_vars, y_vars=y_vars)
Run Code Online (Sandbox Code Playgroud)

现在我想向第二个和第三个子图添加 y 轴刻度和标签。
添加 y 轴标签很简单:
pp.set(ylabel='petal_width')
Run Code Online (Sandbox Code Playgroud)

但我一生都无法弄清楚如何显示 y_ticklabels。
像:
pp.set(yticklabels=np.arange(-0.5, 3.01, 0.5))
Run Code Online (Sandbox Code Playgroud)
或者:
for i in range(3):
ax = pp.axes[0,i]
ax.set_yticks(np.arange(-0.5, 3.01, 0.5))
ax.set_yticklabels(np.arange(-0.5, 3.01, 0.5))
ax.set_visible(True)
Run Code Online (Sandbox Code Playgroud)
没有什么区别。
python ×10
matplotlib ×2
numpy ×2
pandas ×2
scipy ×2
ajax ×1
arrays ×1
compare ×1
function ×1
optimization ×1
python-2.7 ×1
r ×1
random ×1
regex ×1
rest ×1
seaborn ×1
series ×1
simplejson ×1
statistics ×1
subplot ×1