Python 3.x 将xml文件中的数据提取到数据帧中
我试图从一个xml文件中提取一些数据,下面是该文件的一个示例(它非常大) head()命令告诉我:Python 3.x 将xml文件中的数据提取到数据帧中,python-3.x,xml,pandas,dataframe,data-extraction,Python 3.x,Xml,Pandas,Dataframe,Data Extraction,我试图从一个xml文件中提取一些数据,下面是该文件的一个示例(它非常大) head()命令告诉我: Processo Despacho Titular Marca Procurador 0 909359539 [[]] [[]] None [] 1 826455069 [[]] [[]] None [] 2 916823270 [[]] [
Processo Despacho Titular Marca Procurador
0 909359539 [[]] [[]] None []
1 826455069 [[]] [[]] None []
2 916823270 [[]] [[]] None []
3 916625303 [[]] [[]] None []
4 916626873 [[]] [[]] None None
“Processo”运行良好,但“Despacho”、“Titular”和“Procurador”给了我这个括号,“Marca”没有给我数据,都是空值
我把所有的东西都转换成字符串,看看那些括号会变成什么,得到了这个
Processo Despacho Titular Marca Procurador
0 909359539 <Element 'despachos' at 0x7fb47f082b38> <Element 'titulares' at 0x7fb47f08e1d8> None <Element 'procurador' at 0x7fb47f08e548>
1 826455069 <Element 'despachos' at 0x7fb47f08e5e8> <Element 'titulares' at 0x7fb47f08e688> None <Element 'procurador' at 0x7fb47f08e9f8>
2 916823270 <Element 'despachos' at 0x7fb47f08ea98> <Element 'titulares' at 0x7fb47f08eb38> None <Element 'procurador' at 0x7fb47f08eea8>
3 916625303 <Element 'despachos' at 0x7fb47f08ef48> <Element 'titulares' at 0x7fb47f099048> None <Element 'procurador' at 0x7fb47f0994a8>
4 916626873 <Element 'despachos' at 0x7fb47f099548> <Element 'titulares' at 0x7fb47f0995e8> None None
我得到了这个
Processo Despacho Titular Marca Procurador
0 909359539 \n \n \n Vaz e Dias Advogados & Associados
1 826455069 \n \n \n CIDWAN UBERLÂNDIA LTDA ME
2 916823270 \n \n \n Wettor - Bureau de Apoio Empresarial S/S Ltda. ME
3 916625303 \n \n \n Lilian de Melo Silveira Advogados Associados S/C
4 916626873 \n \n \n None
现在“Procurador”也在工作,“我在“Marca”中得到了一些数据,但“/n”是怎么回事?xml文件中没有这样的字符串。发生了什么事?注意:在结束
revista
问题是您没有使代码适应xml文件的结构
您会得到一个\n
,因为节点.find('despachos')。text
提供了despachos
中包含的文本。但是,其中没有真正的文本,只有\n
后跟空格。Pandas将按原样显示,无需任何解析。您必须应用节点.find('despachos')。text.rstrip()
以避免这种情况
此外,在despacho
中,您有一个名为despacho
的子节点,它是一个封闭的标记,因此也没有文本。但是,它有两个属性codigo
和nome
,您可以将其用作processo
。例如:
node.find('despachos').find('despacho').attrib.get('nome')
它在第一个节点内找到第一个节点despacho
,然后提取属性nome
我以为你想要这样的东西:
将xml.etree.ElementTree作为et导入
作为pd进口熊猫
xtree=et.parse(“test.xml”)
xroot=xtree.getroot()
df_cols=['Processo','Despacho','Titular','Marca','Procurador']
行=[]
对于xroot中的节点:
processo=node.attrib.get('numero')
despacho=node.find('despachos').find('despacho').attrib.get('nome'))
titular=node.find('titulares').find('titular').attrib.get('nome-razao-social'))
marca=node.find('marca').find('nome').text
procurador=node.find('procurador')。文本
附加({'Processo':Processo,'Despacho':Despacho,'Titular':Titular,'Marca':Marca,'Procurador':Procurador})
pd.DataFrame(行、列=df_cols)
名义上的检察官程序
0 909359539高级行政区注册登记中心LTDA DSR高级行政区注册登记中心
1 826455069埃斯科拉赌场登记处-我的赌场登记处-我的赌场登记处
df_cols = ['Processo', 'Despacho', 'Titular', 'Marca', 'Procurador']
rows =[]
for node in xroot:
processo = node.attrib.get('numero')
despacho = node.find('despachos').text if node.find('despachos') is not None else None
titular = node.find('titulares').text if node.find('titulares') is not None else None
marca = node.find('marca').text if node.find('marca') is not None else None
procurador = node.find('procurador').text if node.find('procurador') is not None else None
rows.append({'Processo':processo, 'Despacho':despacho, 'Titular':titular, 'Marca':marca, 'Procurador':procurador})
rpi_df = pd.DataFrame(rows, columns= df_cols)
Processo Despacho Titular Marca Procurador
0 909359539 \n \n \n Vaz e Dias Advogados & Associados
1 826455069 \n \n \n CIDWAN UBERLÂNDIA LTDA ME
2 916823270 \n \n \n Wettor - Bureau de Apoio Empresarial S/S Ltda. ME
3 916625303 \n \n \n Lilian de Melo Silveira Advogados Associados S/C
4 916626873 \n \n \n None
node.find('despachos').find('despacho').attrib.get('nome')
Processo Despacho Titular Marca Procurador
0 909359539 Concessão de registro DISTRIBUIDORA DE SUPERGELADOS REGIONAIS LTDA DSR DISTRIBUIDORA DE SUPERGELADOS REGIONAIS Vaz e Dias Advogados & Associados
1 826455069 Concessão de registro ESCOLA CASINHA BRANCA DE UBERLÂNDIA LTDA-ME CASINHA BRANCA CIDWAN UBERLÂNDIA LTDA ME