Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从xml创建数据框架_Python_Xml_Pandas_Dataframe_Dictionary - Fatal编程技术网

Python 从xml创建数据框架

Python 从xml创建数据框架,python,xml,pandas,dataframe,dictionary,Python,Xml,Pandas,Dataframe,Dictionary,我有一个xml,我想解析它并创建一个数据框架。到目前为止,我一直在尝试的是: all_dicts = [] fields = ['f1','f2','f3','f4','f5','f6','f7'] for i in root.findall('.//item'): d = {} for j in product.findall('.//subitems'): for k in j.findall('.//subitem'): if k.a

我有一个xml,我想解析它并创建一个数据框架。到目前为止,我一直在尝试的是:

all_dicts = []
fields = ['f1','f2','f3','f4','f5','f6','f7']
for i in root.findall('.//item'):
    d = {}
    for j in product.findall('.//subitems'):
        for k in j.findall('.//subitem'):
            if k.attrib['name'] in fields:
                d[k.attrib['name']] = k.text

    all_dicts.append(d)
这给了我一个字典列表,我可以很容易地使用pd.DataFrame(所有字典)来获得我想要的。但是,
子项
往往有多个子元素具有相同的
名称
。例如,每个
子项
可能有多个时间
k.attrib['name']==f1
,因此它会使用相同的键向字典中添加一个项,因此在需要所有项时只会覆盖上一个值。有没有一种方法可以轻松创建数据帧之类的内容?

  • 用于检查密钥是否存在
    • 如果密钥不存在,请将其添加为列表
    • 如果密钥确实存在,请附加到列表中
  • 没有全面的xml示例,我无法提供更详细的示例
all_dicts=[]
字段=['f1'、'f2'、'f3'、'f4'、'f5'、'f6'、'f7']
对于root.findall('.//项')中的i:
d=dict()
对于product.findall('.//子项')中的j:
对于j.findall(“.//子项”)中的k:
n=k.attrib['name']
如果字段中有n:
如果d.get(n)=无:#检查键是否存在
d[n]=[k.text]#将键添加为列表
其他:
d[n].附加(k.text)#附加到列表
所有命令追加(d)
  • 或者,如果字段为
    'f1'
    ,则仅将
    dict
    值添加为列表
all_dicts=[]
字段=['f1'、'f2'、'f3'、'f4'、'f5'、'f6'、'f7']
对于root.findall('.//项')中的i:
d=dict()
对于product.findall('.//子项')中的j:
对于j.findall(“.//子项”)中的k:
n=k.attrib['name']
如果字段中有n且n==“f1”:#如果字段为“f1”,则添加列表
如果d.get(n)=无:#检查键是否存在
d[n]=[k.text]#将键添加为列表
其他:
d[n].附加(k.text)#附加到列表
elif in fields:#如果字段不是'f1',只需添加文本即可
d[n]=k.text
所有命令追加(d)