Python Pandas: 在迭代器上使用 map 函数
Python Pandas: use map function on iterator
对于你们中的一些人来说,这可能是一个简单的问题。
我正在解析一棵 XML 树,它具有相当复杂的嵌套结构。这是代码的一部分:
import xml.etree.ElementTree as ET
import pandas as pd
from bs4 import BeautifulSoup as BS
tree = ET.parse('input_data.xml')
root = tree.getroot()
for unit in root.iter('xml_element_name'):
# do something with the unit
但我想摆脱 for-each 迭代,因为我想使用映射函数(例如 Pandas.Series.map 或 Pandas.Dataframe.map 或任何类似函数)。所以这是我想要实现的伪代码:
items = pd.Series(root.iter('xml_element_name'))
df = pd.Dataframe(items.map(lambda unit: ....))
但是怎么办?有什么想法吗?
PS: 示例 XML 可以在 tutorial of the ElementTree.
中找到
为什么我要这样做?因为我想稍后切换到 PySpark,以便并行处理每个 XMLElement(单元)。
没有什么可以成为您不了解正在解析的文档的结构的借口。使用您引用的示例,您可以结合使用列表和字典理解将某些内容传递给 pd.DataFrame
构造函数。
希望这能给你带来灵感
pd.DataFrame([
{a.tag: a.text for a in c if a.tag != 'neighbor'}
for c in root.findall('country')
])
gdppc rank year
0 141100 1 2008
1 59900 4 2011
2 13600 68 2011
您可以尝试通过以下方式从迭代器创建平面数据结构:
flat_list = list(root.iter())
然后从中创建一个 DataFrame。
这是完整的片段:
import xml.etree.ElementTree as ET
import pandas as pd
from bs4 import BeautifulSoup as BS
import pdb
tree = ET.parse('cd_catalog.xml')
root = tree.getroot()
flat_list = list(root.iter())
df = pd.DataFrame({'xml_elements':flat_list})
# do some arbitrary computation on the df:
result = df.xml_elements.map(lambda x: x.text)
print(result.head(n=3))
(link 到 xml file)
对于你们中的一些人来说,这可能是一个简单的问题。
我正在解析一棵 XML 树,它具有相当复杂的嵌套结构。这是代码的一部分:
import xml.etree.ElementTree as ET
import pandas as pd
from bs4 import BeautifulSoup as BS
tree = ET.parse('input_data.xml')
root = tree.getroot()
for unit in root.iter('xml_element_name'):
# do something with the unit
但我想摆脱 for-each 迭代,因为我想使用映射函数(例如 Pandas.Series.map 或 Pandas.Dataframe.map 或任何类似函数)。所以这是我想要实现的伪代码:
items = pd.Series(root.iter('xml_element_name'))
df = pd.Dataframe(items.map(lambda unit: ....))
但是怎么办?有什么想法吗?
PS: 示例 XML 可以在 tutorial of the ElementTree.
中找到为什么我要这样做?因为我想稍后切换到 PySpark,以便并行处理每个 XMLElement(单元)。
没有什么可以成为您不了解正在解析的文档的结构的借口。使用您引用的示例,您可以结合使用列表和字典理解将某些内容传递给 pd.DataFrame
构造函数。
希望这能给你带来灵感
pd.DataFrame([
{a.tag: a.text for a in c if a.tag != 'neighbor'}
for c in root.findall('country')
])
gdppc rank year
0 141100 1 2008
1 59900 4 2011
2 13600 68 2011
您可以尝试通过以下方式从迭代器创建平面数据结构:
flat_list = list(root.iter())
然后从中创建一个 DataFrame。
这是完整的片段:
import xml.etree.ElementTree as ET
import pandas as pd
from bs4 import BeautifulSoup as BS
import pdb
tree = ET.parse('cd_catalog.xml')
root = tree.getroot()
flat_list = list(root.iter())
df = pd.DataFrame({'xml_elements':flat_list})
# do some arbitrary computation on the df:
result = df.xml_elements.map(lambda x: x.text)
print(result.head(n=3))
(link 到 xml file)