小编MBa*_*ith的帖子

Python获取特定元素的元素值

我正在尝试解析下面的 XML 文件,但很难获得特定的元素值。我正在尝试指定元素 'Item_No_2' 以获取相关值,<v>2222222222</v>但无法使用 get.element('Item_No_2') 执行此操作。我是否错误地使用了 get.element 值?

XML文件:

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="Data.xsl"?>
<abc>
  <md>
    <mi>
      <datetime>20160822020003</datetime>
      <period>3600</period>
      <it>Item_No_1</it>
      <it>Item_No_2</it>
      <it>Item_No_3</it>
      <it>Item_No_4</it>
      <it>Item_No_5</it>
      <it>Item_No_6</it>
      <it>Item_No_7</it>
      <ovalue>
        <v>1111111111</v>
        <v>2222222222</v>
        <v>3333333333</v>
        <v>4444444444</v>
        <v>5555555555</v>
        <v>6666666666</v>
        <v>7777777777</v>
      </ovalue>
    </mi>
  </md>
</abc>
Run Code Online (Sandbox Code Playgroud)

我的代码:

from xml.etree.ElementTree import parse

doc = parse('test.xml').getroot()

for element in doc.findall('md/mi/'):
    print(element.text)

for element in doc.findall('md/mi/ovalue/'):
    print(element.text)
Run Code Online (Sandbox Code Playgroud)

当前输出分别获取它们,但我似乎无法理解如何调用特定的元素值。

输出:

20160822020003
3600
Item_No_1
Item_No_2
Item_No_3
Item_No_4
Item_No_5
Item_No_6
Item_No_7


1111111111
2222222222
3333333333
4444444444
5555555555
6666666666
7777777777
Run Code Online (Sandbox Code Playgroud)

试过这个,但没有奏效:

for …
Run Code Online (Sandbox Code Playgroud)

python xml elementtree

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

Python访问字典列表中的字典

嗨,我有下面的字典,其中有一个列表值,列表中有一个字典.有没有办法使用键而不是列表索引来调用列表中的字典值?名单内的字典可能会有所不同,因此指数值可能并不总是提供正确的键值对.但是,如果我能够使用密钥,我总能得到正确的值.

mylist = {'mydict': [{'A': 'Letter A'}, {'B': 'Letter C'}, {'C': 'Letter C'}]}
print(mylist['mydict'][0]['A'])
Run Code Online (Sandbox Code Playgroud)

电流输出:

Letter A
Run Code Online (Sandbox Code Playgroud)

期望的查询:

print(mylist['mydict']['A'])
Letter A
Run Code Online (Sandbox Code Playgroud)

python dictionary list

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

选择列(如果它们的任何行包含某个字符串)

我正在尝试获取DataFrame中的列列表,如果列中的任何值包含字符串。例如,在下面的数据框中,我想要一个字符串列表中包含%的列的列表。我可以使用for循环和series.str.contains方法来完成此操作,但似乎不是最佳方法,尤其是对于较大的数据集。有没有更有效的方法可以做到这一点?

import pandas as pd

df = pd.DataFrame({'A': {0: '2019-06-01', 1: '2019-06-01', 2: '2019-06-01'},
                   'B': {0: '10', 1: '20', 2: '30'},
                   'C': {0: '10', 1: '20%', 2: '30%'},
                   'D': {0: '10%', 1: '20%', 2: '30'},
               })
Run Code Online (Sandbox Code Playgroud)

数据框

            A   B    C    D
0  2019-06-01  10   10  10%
1  2019-06-01  20  20%  20%
2  2019-06-01  30  30%   30
Run Code Online (Sandbox Code Playgroud)

当前方法

col_list = []
for col in df.columns:
    if (True in list(df[col].str.contains('%'))) is True:
        col_list.append(col)
Run Code Online (Sandbox Code Playgroud)

输出量

['C', 'D']
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas

6
推荐指数
5
解决办法
116
查看次数

Matplotlib 在所有子图上显示 x-ticks 和唯一的 y 标签

我正在绘制共享相同 x 轴的两个子图,但是当我绘制时,我只看到第二个子图上的 x 轴刻度。如何使两个子图上的 x-ticks 都可见?

此外,我想为两个子图设置 y 标签,但只有第二个可见。你能帮忙在两个子图上显示 y 标签吗?

下面是我的可重现代码。

#!/usr/bin/python3
import pandas as pd
desired_width = 1500
pd.set_option('display.width', desired_width)
import matplotlib.pyplot as plt
import numpy as np


df = pd.DataFrame([{'DATETIME': '2017-09-29 01:00,', 'Population': 1000, 'Temp': 90, 'State': 'California'},
                   {'DATETIME': '2017-09-29 01:00,', 'Population': 2000, 'Temp': 70, 'State': 'Illinois'},
                   {'DATETIME': '2017-09-29 01:00,', 'Population': 3000, 'Temp': 50, 'State': 'Georgia'},
                   {'DATETIME': '2017-09-29 02:00,', 'Population': 2000, 'Temp': 40, 'State': 'California'},
                   {'DATETIME': '2017-09-29 02:00,', 'Population': 6000, 'Temp': 20, 'State': 'Illinois'},
                   {'DATETIME': '2017-09-29 …
Run Code Online (Sandbox Code Playgroud)

python matplotlib pandas subplot

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

Pandas 在另一个表的范围内查找值

在下面的示例中,我尝试检查表 1中的“值”是否在表 2中“开始”和“停止”列的行中的值范围内。如果值在该范围内,我想返回“Fruit”类型。Between 方法似乎能够完成此任务,但不确定如何将其应用于另一个表中的行。注意我需要使用大型数据集来执行此任务,并且愿意使用 pandas 库之外的方法。

在此输入图像描述

示例代码

df1 = pd.DataFrame({'Date': {0: '06-01', 1: '06-02', 2: '06-03', 3: '06-04'},
                   'Value': {0: 3, 1: 7, 2: 9, 3: 16}, })

df2 = pd.DataFrame({'Start': {0: 1, 1: 6, 2: 11, 3: 16},
                    'Stop': {0: 5, 1: 10, 2: 15, 3: 20},
                    'Fruit': {0: 'Apple', 1: 'Orange', 2: 'Pear', 3: 'Mango'},})
Run Code Online (Sandbox Code Playgroud)

表格1

    Date  Value
0  06-01      3
1  06-02      7
2  06-03      9
3  06-04     16
Run Code Online (Sandbox Code Playgroud)

表2

    Fruit  Start  Stop
0 …
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas

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

带有圆角的 Seaborn 条形图

我正在尝试绘制一些条形图,但想控制角的圆度。我尝试按照在 Matplotlib 中带圆角的堆栈问题条形图中提供的答案进行操作,但似乎无法获得相同的结果。如何使条形边缘具有圆角并控制圆度?还有更好的替代 FancyBboxPatch 吗?

下面是我的可测试代码以及​​当前和所需的输出。

我的代码:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from matplotlib.patches import FancyBboxPatch

mydict = {
    'Event': ['Running', 'Swimming', 'Biking', 'Hiking'],
    'Completed': [2, 4, 3, 7],
    'Participants': [10, 20, 35, 10]}

df = pd.DataFrame(mydict).set_index('Event')
df = df.assign(Completion=(df.Completed / df.Participants) * 100)
print(df)

plt.subplots(figsize=(5, 2))

sns.set_color_codes("pastel")
ax = sns.barplot(x=df.Completion, y=df.index, orient='h', joinstyle='bevel')

new_patches = []
for patch in reversed(ax.patches):
    bb = patch.get_bbox()
    color = patch.get_facecolor() …
Run Code Online (Sandbox Code Playgroud)

matplotlib python-3.x pandas seaborn

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

所有主机的 Ansible 附加字典结果

我正在尝试使用 Ansible 向多个主机发送返回字典的命令。然后我想附加每个主机的字典结果来累积所有主机的结果。最后,我想打印累积结果的字典以供以后处理或写入文件。由于结果显示为字符串,我似乎无法合并字典。有办法解决这个问题吗?另外,是否有更 Ansible 有效的方法来完成此任务?

示例手册:

---
  - hosts: myhosts
    gather_facts: False
    vars:
      mydict: {}
    tasks:
    - name: Get dict result
      shell: "cat /path/dict_output"
      register: output
    - set_fact:
       result_dict="{{ output.stdout}}"

    - debug: var=result_dict
Run Code Online (Sandbox Code Playgroud)

调试输出:

TASK [debug] ****************************************************************************************************************************************************************
ok: [host-a] => {
    "result_dict": {
        "host_b": [
            {
                "ip-1": {
                    "port": "22", 
                    "service": "ssh"
                }
            }, 
            {
                "ip-2": {
                    "port": "21", 
                    "service": "ftp"
                }
            }
        ]
    }
}
ok: [host-b] => {
    "result_dict": {
        "host_a": [
            {
                "ip-1": {
                    "port": "22", 
                    "service": …
Run Code Online (Sandbox Code Playgroud)

python dictionary python-3.x ansible

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

Pandas 分组并计算两列的比率

我正在尝试使用 Pandas 和 groupby 来计算两列的比率。在下面的示例中,我要计算每个部门的员工状态比率(部门状态数/每个部门的员工总数)。例如,销售部门共有 3 名员工,具有员工身份的员工人数为 2 人,比例为 2/3,即 66.67%。我设法破解了这个问题,但必须有一个更优雅和简单的方法来做到这一点。如何更有效地获得下面所需的输出?

原始数据框:

  Department    Name      Status
0      Sales    John    Employee
1      Sales   Steve    Employee
2      Sales    Sara  Contractor
3    Finance   Allen  Contractor
4  Marketing  Robert    Employee
5  Marketing    Lacy  Contractor
Run Code Online (Sandbox Code Playgroud)

代码:

mydict ={
        'Name': ['John', 'Steve', 'Sara', 'Allen', 'Robert', 'Lacy'],
        'Department': ['Sales', 'Sales', 'Sales', 'Finance', 'Marketing', 'Marketing'],
        'Status': ['Employee', 'Employee', 'Contractor', 'Contractor', 'Employee', 'Contractor']
    }

df = pd.DataFrame(mydict)

# Create column with total number …
Run Code Online (Sandbox Code Playgroud)

python-3.x pandas pandas-groupby

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