jab*_*bba 5 python xml dataframe pandas
有一个如下所示的 XML 文件:
?<?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>
Run Code Online (Sandbox Code Playgroud)
我想要做的是将 ID、Text 和 CreationDate 列提取到 Pandas DF 中,我尝试了以下操作:
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)
Run Code Online (Sandbox Code Playgroud)
但输出是:无无无
你能告诉我如何解决这个问题吗?谢谢
正如黄金会员 Python/pandas/numpy 大师 @unutbu在此解决方案中所建议的:
切勿在 for 循环内调用 DataFrame.append 或 pd.concat。它导致二次复制。
因此,请考虑将 XML 数据解析为单独的列表,然后DataFrame
在任何循环之外的一次调用中将列表传递到构造函数中。事实上,您可以将具有列表理解的嵌套列表直接传递到构造函数中:
path = 'AttributesXMLPandas.xml'
dfcols = ['ID', 'Text', 'CreationDate']
root = et.parse(path)
rows = root.findall('.//row')
# NESTED LIST
xml_data = [[row.get('Id'), row.get('Text'), row.get('CreationDate')]
for row in rows]
df_xml = pd.DataFrame(xml_data, columns=dfcols)
print(df_xml)
# ID Text CreationDate
# 0 1 (...) 2011-08-30T21:15:28.063
# 1 2 (...) 2011-08-30T21:24:56.573
# 2 3 (...) None
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11254 次 |
最近记录: |