只是想知道是否有人能够帮助找出我在这个 Python 脚本中出错的地方。我正在尝试阅读美国灯光列表每周更改 xml(此处找到: https://www.navcen.uscg.gov/sites/default/files/xml/lightLists/weeklyUpdates/v7d09WeeklyChanges.xml )到 Pandas 数据帧中。我不经常编程,所以我只是慢慢开始,尝试将每个援助的“地区”字段写入一个空列表。当我运行脚本时,它在“地区”列中显示“无”。如何将“District”字段输出到数据框?谢谢。
from lxml import etree
from lxml import objectify
import pandas as pd
import pandas_read_xml as pdx
import xml.etree.ElementTree as et
xml_file = (r'C:\Users\LAWRENCEA\Downloads\v7d09WeeklyChanges.xml')
parsed_xml = et.parse(xml_file)
xroot = parsed_xml.getroot()
df_cols = ["District"]
rows = []
for record in xroot.iter('dataroot'):
for field in record.findall('Vol_x0020_07_x0020_D9_x0020_LL_x0020_corr_x0020_thru'):
s_District = field.attrib.get('District')
rows.append({"District": s_District})
df = pd.DataFrame(rows, columns = df_cols)
print(df)
的代码的问题在于,正在尝试在错误的元素上访问
attrib
。
attrib
方法用于从 XML 元素中检索属性,但
District
是 XML 结构中
field
元素的
子元素
,而不是属性。
以下是修正后的代码:
import pandas as pd
import xml.etree.ElementTree as ET
xml_file = 'v7d09WeeklyChanges.xml'
tree = ET.parse(xml_file)
root = tree.getroot()
rows = []
for record in root.iter('dataroot'):
for field in record.findall('Vol_x0020_07_x0020_D9_x0020_LL_x0020_corr_x0020_thru'):
district = field.find('District').text if field.find('District') is not None else None
rows.append({"District": district})
df = pd.DataFrame(rows)
print(df)
这段代码做出了以下更改:
-
直接查找
District
元素: 我们使用field.find('District')
来查找field
元素下的District
子元素。 -
处理缺失的
District
元素: 我们添加了一个检查,以防某些field
元素没有District
子元素。在这种情况下,我们会将District
设置为None
以避免错误。 -
使用
.text
提取文本内容: 我们使用field.find('District').text
来获取District
元素的文本内容。
使用这些更改,的代码现在应该能够正确地将
District
字段提取到 Pandas DataFrame 中。