【问题标题】:How to read XML file into Pandas Dataframe如何将 XML 文件读入 Pandas Dataframe
【发布时间】:2021-11-24 16:02:30
【问题描述】:

我有一个 xml 文件:'product.xml',我想使用 pandas 读取,这里是示例文件的示例:

<?xml version="1.0"?>
 <Rowset>
  <ROW>
   <Product_ID>32</Product_ID>
   <Company_ID>2</Company_ID>
   <User_ID>90</User_ID>
   <Product_Type>1</Product_Type>
   <Application_ID>BBC#:1010</Application_ID>
  </ROW>
  <ROW>
   <Product_ID>22</Product_ID>
   <Company_ID>4</Company_ID>
   <User_ID>190</User_ID>
   <Product_Type>2</Product_Type>
   <Application_ID>NBA#:1111</Application_ID>
  </ROW>
  <ROW>
   <Product_ID>63</Product_ID>
   <Company_ID>4</Company_ID>
   <User_ID>99</User_ID>
   <Product_Type>1</Product_Type>
   <Application_ID>BBC#:1212</Application_ID>
  </ROW>
  <ROW>
   <Product_ID>22</Product_ID>
   <Company_ID>2</Company_ID>
   <User_ID>65</User_ID>
   <Product_Type>2</Product_Type>
   <Application_ID>NBA#:2210</Application_ID>
  </ROW>

我正在尝试使用 pandas 生成一个 2D 表,例如:

Application ID Product Type  Product ID
BBC#:1010            1         32
NBA#:1111            2         22
BBC#:1212            1         63  
NBA#:2210            2         22   

到目前为止,我已经尝试过这段代码:

import xml.etree.cElementTree as ET
import pandas as pd
import pandas_read_xml as pdx
df = pdx.read_xml('product.xml')
path='product.xml'
dfcols = ['Application_ID', 'Product_Type', 'Product_ID']
root = et.parse(path)
rows = root.findall('.//ROW')
#NESTED LIST
xml_data = [[row.get('Application_ID'), row.get('Product_Type'), row.get('Product_ID')] for row in rows]
df_xml = pd.DataFrame(xml_data, columns=dfcols)

print(df_xml)

我怎样才能打印那种类型的二维表?请帮忙,谢谢。

【问题讨论】:

  • 欢迎来到 Stack Overflow。请具体说明:“这不起作用”到底是什么意思?
  • 但这不起作用请提供更多信息,不起作用是什么意思?您创建的代码在运行时是否会引发错误?如果是,那是什么错误?如果不是,并且您得到错误的答案,请提供上述答案并写下当前应该如何不同

标签: python pandas xml elementtree


【解决方案1】:

从 Pandas 1.3.0 开始,有一个 read_xml() function 可以更轻松地在 pandas 中读取/写入 XML 数据。

升级到 Pandas >1.3.0 后,您可以简单地使用:

df = pd.read_xml("___XML_FILEPATH___")
print(df)

(请注意,在上面的 XML 示例中,&lt;Rowset&gt; 标记需要关闭)

【讨论】:

    【解决方案2】:

    使用[] 过滤和重组列:

    cols = ['Application_ID', 'Product_Type', 'Product_ID']
    df = pd.read_xml('product.xml')[cols]
    print(df)
    
    # Output:
      Application_ID  Product_Type  Product_ID
    0      BBC#:1010             1          32
    1      NBA#:1111             2          22
    2      BBC#:1212             1          63
    3      NBA#:2210             2          22
    

    如果您想将列名中的'_' 替换为' '

    df.columns = df.columns.str.replace('_', ' ')
    print(df)
    
    # Output:
      Application ID  Product Type  Product ID
    0      BBC#:1010             1          32
    1      NBA#:1111             2          22
    2      BBC#:1212             1          63
    3      NBA#:2210             2          22
    

    【讨论】:

      猜你喜欢
      • 2020-08-27
      • 2016-02-22
      • 2019-03-28
      • 2019-06-08
      • 1970-01-01
      • 2017-11-14
      • 2017-05-08
      • 1970-01-01
      • 2020-03-28
      相关资源
      最近更新 更多