我试图通过添加一个条件来创建一个数据帧,以仅获取正常运行的数据,即某个属性(如"堆栈").

我的windows 10和spyder IDE中安装了pandas 1.3.4.

import pandas as pd

df_employee = pd.read_xml('employee.xml',xpath='employee_name')
df_cor = pd.read_xml('employee.xml',xpath='employee_name/email')
df_id = pd.read_xml('employee.xml',xpath='employee_name/email/id')
df_id2 = pd.read_xml('employee.xml',xpath='//id')
df_address = pd.read_xml('employee.xml',xpath='employee_name/email/id/address')
df_address2 = pd.read_xml('employee.xml',xpath='//address')
df_street = pd.read_xml('employee.xml',xpath='employee_name/email/id/address/street')
df_street2 = pd.read_xml('employee.xml',xpath='//street')
df_state = pd.read_xml('employee.xml',xpath='employee_name/email/id/address/street/state')
df_cell_cap = pd.read_xml('employee.xml',xpath='employee_name/email/id[@name="stack"]//address')
df_street_stack = pd.read_xml('employee.xml',xpath='employee_name/email/id[@name="stack"]//street')

代码在此阶段正常运行,但当它到达下一行时会抛出错误.

df_cell_cap = pd.read_xml('employee.xml',xpath='employee_name/email/id[@name="stack"]//address')

我try 了以下方法,但错误仍然存在.

df_address_stack = pd.read_xml('employee.xml',xpath='employee_name/email/id[contains(@name,"stack")]//address')
df_address_stack = pd.read_xml('employee.xml',xpath='employee_name/email/id/*[name() = 'stack']/address'

错误:

Value错误: xpath does not return any nodes. Be sure row level nodes are in xpath. If document uses namespaces denoted with xmlns, be sure to define namespaces and use them in xpath.

有什么我遗漏的吗?

<?xml version="1.0" encoding="UTF-8"?>
<employee_name name="ndlkjfidm" date="dfhkryi">
    <email name="nnn" P="ffgnp" V="0.825" T="125c">
        <id name="stack">
            <address name="adas_jk3" type="entry">
                <street name="VSS" voltage="0.000000" vector="!ENXB" active_input="NA" active_ouput="ENX">
                    <temp name="ADS_DEFAULT_temp_LOW">
                        <raw nod="VBP" alt="7.05537e-15" jus="74.4619" />
                        <raw nod="VDDC" alt="4.63027e-10" jus="115.178" />
                    </temp>
                </street>
                <street name="VSS" voltage="0.000000" vector="ENXB" active_input="NA" active_ouput="ENX">
                    <temp name="ADS_DEFAULT_temp_HIGH">
                        <raw nod="VBP" alt="7.05537e-15" jus="74.4644" />
                        <raw nod="VDDC" alt="1.52578e-14" jus="311.073" />
                    </temp>
                </street>
            </address>
        </id>
    </email>
</employee_name>

推荐答案

您的示例XML:

<employee_name name="ndlkjfidm" date="dfhkryi">
    <email name="nnn" P="ffgnp" V="0.825" T="125c">
        <id name="stack">
            <address name="adas_jk3" type="entry">
                <street name="VSS" voltage="0.000000" vector="!ENXB" active_input="NA" active_ouput="ENX">
                    <temp name="ADS_DEFAULT_temp_LOW">
                        <raw nod="VBP" alt="7.05537e-15" jus="74.4619" />
                        <raw nod="VDDC" alt="4.63027e-10" jus="115.178" />
                    </temp>
                </street>
                <street name="VSS" voltage="0.000000" vector="ENXB" active_input="NA" active_ouput="ENX">
                    <temp name="ADS_DEFAULT_temp_HIGH">
                        <raw nod="VBP" alt="7.05537e-15" jus="74.4644" />
                        <raw nod="VDDC" alt="1.52578e-14" jus="311.073" />
                    </temp>
                </street>
            </address>
        </id>
    </email>
</employee_name>

如果阅读pandas.read_xml的文档,您会发现xpath需要用//前缀指定.您可以指定也可以不指定斜杠前的.个句点.

因此,在进行以下更改后,您的代码应该可以正常工作

df_employee = pd.read_xml(filename,xpath='//employee_name')

        name     date  email
0  ndlkjfidm  dfhkryi    NaN

df_cor = pd.read_xml(filename,xpath='//employee_name/email')

  name      P      V     T  id
0  nnn  ffgnp  0.825  125c NaN

df_id = pd.read_xml(filename,xpath='//employee_name/email/id')

    name  address
0  stack      NaN

df_address_stack = pd.read_xml(filename,xpath='//employee_name/email/id[contains(@name,"stack")]//address')

   name   type  street
0  adas_jk3  entry     NaN

这给了我们预期的输出

Python相关问答推荐

Pandas 群内滚动总和

从 struct 类型创建MultiPolygon对象,并使用Polars列出[list[f64]列

Python panda拆分列保持连续多行

无法使用python.h文件; Python嵌入错误

通过仅导入pandas来在for循环中进行多情节

使用LineConnection动画1D数据

Pandas 第二小值有条件

如何在msgraph.GraphServiceClient上进行身份验证?

根据不同列的值在收件箱中移动数据

滚动和,句号来自Pandas列

从收件箱中的列中删除html格式

对象的`__call__`方法的setattr在Python中不起作用'

在vscode上使用Python虚拟环境时((env))

Asyncio:如何从子进程中读取stdout?

Django RawSQL注释字段

Python脚本使用蓝牙运行在Windows 11与raspberry pi4

如何指定列数据类型

python中csv. Dictreader. fieldname的类型是什么?'

ModuleNotFoundError:没有模块名为x时try 运行我的代码''

Python 3试图访问在线程调用中实例化的类的对象