首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python:将XML提取为DataFrame (Pandas)

Python:将XML提取为DataFrame (Pandas)
EN

Stack Overflow用户
提问于 2018-06-09 20:19:53
回答 2查看 12K关注 0票数 5

A有一个如下所示的XML文件:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<comments>
<row Id="1" PostId="2" Score="0" Text="(...)" CreationDate="2011-08-30T21:15:28.063" UserId="16" />
<row Id="2" PostId="17" Score="1" Text="(...)" CreationDate="2011-08-30T21:24:56.573" UserId="27" />
<row Id="3" PostId="26" Score="0" Text="(...)" UserId="9" />
</comments>

我正在尝试做的是将ID、文本和CreationDate列提取到pandas DF中,我尝试了以下几种方法:

代码语言:javascript
复制
import xml.etree.cElementTree as et
import pandas as pd
path = '/.../...'
dfcols = ['ID', 'Text', 'CreationDate']
df_xml = pd.DataFrame(columns=dfcols)

root = et.parse(path)
rows = root.findall('.//row')
for row in rows:
    ID = row.find('Id')
    text = row.find('Text')
    date = row.find('CreationDate')
    print(ID, text, date)
    df_xml = df_xml.append(pd.Series([ID, text, date], index=dfcols), ignore_index=True)

print(df_xml)

但是输出是: None None None

你能告诉我怎么解决这个问题吗?谢谢

EN

回答 2

Stack Overflow用户

发布于 2018-06-09 20:41:43

只需对代码稍作修改即可

代码语言:javascript
复制
ID = row.get('Id')
text = row.get('Text')
date = row.get('CreationDate')
票数 3
EN

Stack Overflow用户

发布于 2019-11-28 00:28:24

基于@Parfait解决方案,我编写了我的版本,将列作为参数获取并返回Pandas DataFrame。

test.xml:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<comments>
<row Id="1" PostId="2" Score="0" Text="(.1.)" CreationDate="2011-08-30T21:15:28.063" UserId="16" />
<row Id="2" PostId="17" Score="1" Text="(.2.)" CreationDate="2011-08-30T21:24:56.573" UserId="27" />
<row Id="3" PostId="26" Score="0" Text="(.3.)" UserId="9" />
</comments>

xml_to_pandas.py:

代码语言:javascript
复制
'''Xml to Pandas DataFrame Convertor.'''

import xml.etree.cElementTree as et
import pandas as pd


def xml_to_pandas(root, columns, row_name):
  '''get xml.etree root, the columns and return Pandas DataFrame'''
  df = None
  try:

    rows = root.findall('.//{}'.format(row_name))

    xml_data = [[row.get(c) for c in columns] for row in rows]  # NESTED LIST

    df = pd.DataFrame(xml_data, columns=columns)
  except Exception as e:
    print('[xml_to_pandas] Exception: {}.'.format(e))

  return df


path = 'test.xml'
row_name = 'row'
columns = ['ID', 'Text', 'CreationDate']

root = et.parse(path)
df = xml_to_pandas(root, columns, row_name)
print(df)

输出:

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50774222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档