<p>您可以转换为json/dictionary,然后让pandas将其展平。你需要<code>pip install xmltodict</code></p>
<p>鉴于:</p>
<pre><code>xml_file.xml = '''
<xml>
<top>
<main_record attr1="val1" attr2 = "val2" attr3="val3">
<sub_record attrx="valx" attry="valy" />
</main_record>
<main_record attr1="val4" attr2 = "val5" attr3="val6">
<sub_record attrx="valx2" attry="valy2" />
</main_record>
<main_record attr1="val7" attr2 = "val8" attr3="val9">
<sub_record attrx="valx3" attry="valy3" />
</main_record>
</top>
</xml>'''
</code></pre>
<p><strong>代码:</strong></p>
<pre><code>import xmltodict
import pandas as pd
with open("xml_file.xml") as xml_file:
data_dict = xmltodict.parse(xml_file.read())
df = pd.json_normalize(data_dict, record_path=['xml','top', 'main_record'])
</code></pre>
<p><strong>输出:</strong></p>
<pre><code>print(df)
@attr1 @attr2 @attr3 sub_record.@attrx sub_record.@attry
0 val1 val2 val3 valx valy
1 val4 val5 val6 valx2 valy2
2 val7 val8 val9 valx3 valy3
</code></pre>
<p>如果您想摆脱<code>'@'</code>,只需将其替换为<code>''</code>:</p>
<pre><code>df.columns = [x.replace('@','') for x in df.columns]
print(df)
attr1 attr2 attr3 sub_record.attrx sub_record.attry
0 val1 val2 val3 valx valy
1 val4 val5 val6 valx2 valy2
2 val7 val8 val9 valx3 valy3
</code></pre>