小编ede*_*esz的帖子

Python cookiecutter 循环遍历列表

我正在尝试遍历 Python cookiecutter json 列表中的所有项目,并基于每个项目运行 bash 命令。

设置

我有以下几点cookiecutter.json

{
    "directory_name": "df-sharp",
    "servers": ["db", "web"],
    "myweb_provisioner": "webck"
}
Run Code Online (Sandbox Code Playgroud)

我有{{cookiecutter.myweb_provisioner}}.sh,其中包含此jinja2代码:

{% for server in cookiecutter.servers %}
mkdir -p ~/myproj/host_types/{{ server }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

问题

当我运行时cookiecutter create-server-tree,我得到以下信息:

Select servers:
1 - db
2 - web
Choose from 1, 2 [1]: 2
Run Code Online (Sandbox Code Playgroud)

和内容webck.sh是:

mkdir -p ~/myproj/host_types/w
mkdir -p ~/myproj/host_types/e
mkdir -p ~/myproj/host_types/b
Run Code Online (Sandbox Code Playgroud)

Select不应该出现的菜单。我不想在列表中的 2 个元素之间进行选择。我想遍历它们并构造 2 个 bash 命令 - …

bash jinja2 python-2.7 cookiecutter

5
推荐指数
1
解决办法
1733
查看次数

Matplotlib 自动化学式下标使用不用斜体文本

我试图用一个化学式自动标记 Python2.7 中 Matplotlib 图的 x 轴,该化学式以数字作为下标,没有斜体。

这是一个代码来显示这一点:

import numpy as np
import pylab as plt

x = np.array([1,2,3,4])
y = np.array([1,2,3,4])

chem_list = ['H2O','CO2','X7Z4']

for j, elem in enumerate(chem_list):
    plt.plot(x,y)
    plt.xlabel(chem_list[j])
    plt.legend(loc=1)
    plt.show()
Run Code Online (Sandbox Code Playgroud)

x 轴标签来自一个列表。列表中的每一项都是一个标签,我需要将其用作标签中的文本。

这种方法有效,但是,文本是斜体的,我需要避免使用斜体文本。产生斜体文本的另一篇文章:here

我的问题示例:

对于循环的第一次迭代,我想使用 H2O ax 作为 x 轴标签,但我不希望它被斜体化。

有没有办法在 Python 中做到这一点?

python plot matplotlib python-2.7

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

Seaborn pairplot传奇 - 如何控制位置

我想在散点图矩阵之外移动Seaborn配对图例.官方文档没有提供关键字legend.我试图在3个不同位置同时绘制情节外的图例:底部中心,顶部中心,右侧中心

我试过这个:

import matplotlib.pyplot as plt
import seaborn as sns
iris = sns.load_dataset("iris")
g = sns.pairplot(iris,hue='species', palette='husl', markers='d', size=2.5, plot_kws=
    {
    "s":40,
    "alpha":1.0,
    'lw':0.5,
    'edgecolor':'k'
    })
plt.legend(loc='upper center', bbox_to_anchor=(1.10, 1.0), ncol=1) #vertical legend
plt.legend(loc='lower center', bbox_to_anchor=(0.0, -0.15), ncol=3) #horizontal legend bottom
plt.legend(loc='upper left', bbox_to_anchor=(0.0, 1.15), ncol=3) #horizontal legend top
g.savefig('Test.png', bbox_inches='tight')
Run Code Online (Sandbox Code Playgroud)

上面代码的输出是这个文件: 输出文件.

所有3个图例都打印错误.我不确定它是否正在进行我要求的定位.我不确定右边发生了什么 - 似乎出现了2个垂直传说,并且出于某种原因它们完全相互重叠.两个水平传说中的一个根本没有出现.

有没有办法避免重叠垂直图例,并将图例放在图中3个位置 - 顶部中心,底部中心,右侧中心?

python matplotlib python-2.7 seaborn

4
推荐指数
2
解决办法
9469
查看次数

Python lmfit 在加权拟合后将卡方减小得太小

我正在 Python 2.7 中运行拟合,并lmfit使用一些测试数据和以下代码。我需要重量为 的加权拟合1/y(使用 Leven-Marq. 例程)。我已经定义了权重并在这里使用它们:

from __future__ import division
from numpy import array, var
from lmfit import Model
from lmfit.models import GaussianModel, LinearModel

import matplotlib.pyplot as plt
import seaborn as sns

xd = array([1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276,
    1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288,
     1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300,
     1301, 1302, 1303, 1304, 1305, 1306, 1307, …
Run Code Online (Sandbox Code Playgroud)

curve-fitting least-squares python-2.7 lmfit

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

Python使用Pandas或NumPy滚动Sharpe比率

我正在尝试使用Python和Pandas / NumPy 生成6个月滚动 Sharpe比率的图。

我的输入数据如下:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style("whitegrid")

# Generate sample data
d = pd.date_range(start='1/1/2008', end='12/1/2015')
df = pd.DataFrame(d, columns=['Date'])
df['returns'] = np.random.rand(d.size, 1)
df = df.set_index('Date')
print(df.head(20))

             returns
Date                
2008-01-01  0.232794
2008-01-02  0.957157
2008-01-03  0.079939
2008-01-04  0.772999
2008-01-05  0.708377
2008-01-06  0.579662
2008-01-07  0.998632
2008-01-08  0.432605
2008-01-09  0.499041
2008-01-10  0.693420
2008-01-11  0.330222
2008-01-12  0.109280
2008-01-13  0.776309
2008-01-14  0.079325
2008-01-15  0.559206
2008-01-16  0.748133
2008-01-17  0.747319 …
Run Code Online (Sandbox Code Playgroud)

finance moving-average pandas

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

Ansible 使用 jinja2 模板连接 2 个文件

我正在尝试垂直连接 2 个文件

第一个文件是roles/myrolename/files/requirements.dat

numpy
matplotlib
dask
Run Code Online (Sandbox Code Playgroud)

第二个文件是~/myprojects/myprojectname/requirements.txt

django
pywinrm
scipy
Run Code Online (Sandbox Code Playgroud)

这是我尝试结合这两个文件,基于

这是我正在使用的任务

- name: Play to combine 2 files
  hosts: localhost
  connection: local

  vars:
    myprojects_path: myprojects
    my_proj_name: myprojectname

  tasks:
    - name: Concatenate 2 files
      template:
        src: "roles/myrolename/templates/requirements.dat.j2"
        dest: "{{ myprojects_path }}/{{ my_proj_name }}/requirements.dat"
Run Code Online (Sandbox Code Playgroud)

这是roles/myrolename/templates/requirements.dat.j2

{% include 'roles/myrolename/files/requirements.dat' %}
{% include myprojects_path + "/" + my_proj_name + "/" + "requirements.txt" %}
Run Code Online (Sandbox Code Playgroud)

此任务给出错误消息(与include中的第二条语句相关roles/myrolename/templates/requirements.dat.j2

fatal: [my_local_machine]: FAILED! => {"changed": false, …
Run Code Online (Sandbox Code Playgroud)

jinja2 ansible

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

以文件名作为列标题将多个 *.txt 文件读入 Pandas Dataframe

我正在尝试导入一组 *.txt 文件。我需要将文件导入 Python 中 Pandas DataFrame 的连续列中。

要求和背景信息:

  1. 每个文件都有一列数字
  2. 文件中不存在标题
  3. 正整数和负整数都是可能的
  4. 所有 *.txt 文件的大小相同
  5. DataFrame 的列必须以文件名(不带扩展名)作为标题
  6. 提前不知道文件数量

这是一个示例 *.txt 文件。所有其他人都具有相同的格式。

16
54
-314
1
15
4
153
86
4
64
373
3
434
31
93
53
873
43
11
533
46
Run Code Online (Sandbox Code Playgroud)

这是我的尝试:

import pandas as pd
import os
import glob

# Step 1: get a list of all csv files in target directory
my_dir = "C:\\Python27\Files\\"
filelist = []
filesList = []
os.chdir( my_dir )

# Step 2: Build …
Run Code Online (Sandbox Code Playgroud)

csv text dataframe python-2.7 pandas

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

将Pandas DF列从UTC转换为美国东部时间,不带日期

我有这个Pandas数据帧列:

                     time_UTC
0   2015-01-05 16:44:34+00:00
1   2015-08-11 16:44:38+00:00
2   2015-08-02 16:53:25+00:00
3   2015-08-17 16:53:25+00:00
4   2015-09-28 16:53:26+00:00
Name: time_UTC, dtype: datetime64[ns, UTC]
Run Code Online (Sandbox Code Playgroud)

我使用以下方法将其从UTC转换为美国东部时区:

list_temp = []
    for row in df['time_UTC']:
        list_temp.append(Timestamp(row, tz = 'UTC').tz_convert('US/Eastern'))
    df['time_EST'] = list_temp
Run Code Online (Sandbox Code Playgroud)

得到这个:

0   2015-01-05 11:44:34-05:00
1   2015-08-11 11:44:38-05:00
2   2015-08-02 11:53:25-05:00
3   2015-08-17 11:53:25-05:00
4   2015-09-28 11:53:26-05:00
Name: time_EST, dtype: datetime64[ns, US/Eastern]
Run Code Online (Sandbox Code Playgroud)

现在,我需要删除条目的日期部分,以便我只得到时间.这就是我需要的:

0   11:44:34-05:00
1   11:44:38-05:00
2   11:53:25-05:00
3   11:53:25-05:00
4   11:53:26-05:00
Name: time_EST, dtype: datetime64[ns, US/Eastern]
Run Code Online (Sandbox Code Playgroud)

尝试:

我试过这个:

print df['time_EST'].apply(lambda x: dt.time(x.hour,x.minute,x.second)) …
Run Code Online (Sandbox Code Playgroud)

timezone python-2.7 pandas

3
推荐指数
1
解决办法
5296
查看次数

未检测到 group_vars 中的 Ansible 保管库密码

我正在尝试使用 ansible-vault 来保护单个 Windows 登录密码。我不想将密码作为纯文本放在 windows.yml 文件中(见下文),因此我尝试使用它ansible-vault来保护/加密该密码。

我有这个目录结构:

myansiblehome
- windows_manage
  - group_vars
    - windows.yml
    - vault
  - hosts
  - win_playbook.yml
Run Code Online (Sandbox Code Playgroud)

我的问题是关于文件的vault。我尝试按照教程将 Windows 登录密码作为加密变量放置在此处。变量名称是ansible_password,想法是我应该在文件中包含哈希值vault,而不是文本中的实际密码。

我的windows.yml文件如下所示(遵循此处的指导):

ansible_user: administrator
ansible_password: "{{ vault_ansible_password }}"
ansible_connection: winrm
ansible_winrm_server_cert_validation: ignore
Run Code Online (Sandbox Code Playgroud)

现在,要创建vault文件,我的步骤如下:

cd windows_manage
ansible-vault create group_vars/vault
Run Code Online (Sandbox Code Playgroud)

然后这是我放入文件中的所有内容vault

---
vault_ansible_password: mypassword
Run Code Online (Sandbox Code Playgroud)

当我使用 运行此文件时ansible-playbook -i ./hosts win_playbook.yml --ask-vault-pass,出现此错误(问题 A):

The field 'password' has an invalid value, which …
Run Code Online (Sandbox Code Playgroud)

hash ansible ansible-vault

3
推荐指数
1
解决办法
8075
查看次数

Python使用GET从API检索多页数据

我正在尝试使用 Python 3使用其 API从此页面requests.get检索数据。我有兴趣使用API从所有页面检索数据。

这是我迄今为止的尝试

data = 'https://api.safecast.org/en-US/measurements'
data = requests.get(url)
Run Code Online (Sandbox Code Playgroud)

我的问题如下 - 当我检查data使用的长度时

len(data.json())
Run Code Online (Sandbox Code Playgroud)

它给了我25。这是因为每页有 25 条记录,并且只返回页码 1。我需要从所有页面检索数据,而不仅仅是第 1 页。

根据API,可以在查询中指定一些参数以过滤搜索。但是,我不知道如何在查询中指定页码。

我浏览了这 2 个 SO 帖子(1、2),但我找不到与我的问题相关的内容

根据这篇文章,我尝试了

print(data.links)
Run Code Online (Sandbox Code Playgroud)

但这只是给了{}

问题

有没有办法使用 API 一次从所有页面收集数据?另外,如何以编程方式确定页数?

python python-requests

3
推荐指数
1
解决办法
9429
查看次数