小编CT *_*Zhu的帖子

使用字典中的映射值添加新的pandas列

我正在尝试做一些在熊猫中应该非常简单的事情,但它似乎不过了.我正在尝试将列添加到现有的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 pandas

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

从SimpleHTTPServer Post数据中读取JSON

我正在尝试使用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)

python ajax rest simplejson simplehttpserver

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

比较2个熊猫系列时会发生什么

在比较两个系列时,我遇到了大熊猫的意外行为.我想知道这是故意还是错误.

假设我:

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)

python compare series pandas

25
推荐指数
1
解决办法
8283
查看次数

如何在python中检查变量的分布?

在单一测试中,我需要检查数组值的分布是否一致.例如:

在数组中= [1, 0, 1, 0, 1, 1, 0, 0] 存在均匀的值分布.由于有四个"1"和四个"0"

对于较大长度的阵列,分布更"均匀"

如何证明正在测试的阵列具有均匀分布?

注意:数组是用random.randint(min,max,len)from 创建的numpy.random

python arrays random statistics numpy

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

正则表达式非固定长度的负向观察

正如文件所述:

这被称为负面的后观断言.与正向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 regex python-2.7

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

使用Python优化(scipy.optimize)

我试图使用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)

python optimization mathematical-optimization scipy

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

R转换为Python

我有一些我在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次.

所有建议将不胜感激......

python numpy r

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

使用曲线拟合的Scipy奇怪的结果

当我尝试拟合我的数据时,结果有点奇怪,我不明白为什么?获得的拟合是平坦的,并且第一个输入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)

python mathematical-optimization curve-fitting scipy

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

matplotlib函数约定:子图与一个图

在使用子图和单个图时,我在matplotlib中对函数的微妙差异(就是它们被称为是什么?)感到非常困惑.

举个例子:

如果我想在单个数字上更改xlim,我会这样做: plt.xlim()

如果我想在子图上更改xlim,我会这样做: ax.set_xlim()

为什么是这样?任何人都可以将我发送到解释惯例的网站吗?这是一个简单的例子,因为我知道它们是不同的,以及如何,但有许多我不知道的,我很难搞清楚 - 例如:

1)将集合应用于子图:ax.collection(collection_name).你是如何为一个人物做的?

2)将刻度标签应用于子图:ax.xaxis.ticklabels(tick_labels).你如何为一个人物做这个?

对不起,这是一个新问题!

python function matplotlib subplot

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

在具有共享轴的 seaborn 对图中显示 y_ticklabels

我正在使用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 matplotlib seaborn

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