抓取网站后,我得到了一个看起来像这样的列表:
data = ['\xa0header1', 'element1', 'element2', 'element3', '\xa0header2', 'element4', 'element5']
等等。
我想用抓取的数据创建一个熊猫数据框,如下所示:
A B
0 element1 header1
1 element2 header1
2 element3 header1
3 element4 header2
4 element5 header2
因此,基本上,我想在下一列中显示标题,该标题位于初始列表的一组元素上方。
考虑到标题前面的特殊字符,如何轻松地在列表中查找它们,该怎么办?
这是使用该itertools
模块的一种解决方案。本质上,这些是我们需要执行的唯一操作:
\xa0
。A
并B
删除嵌套列表。至关重要的是,这些操作已经在标准库中懒惰而有效地实现了,因此无需使用纯Python进行复制(尽管这本身就是一个很好的学习练习)。
完整的解决方案:
from itertools import chain, groupby, repeat
chainer = chain.from_iterable
data = ['\xa0header1', 'element1', 'element2', 'element3',
'\xa0header2', 'element4', 'element5']
def condition(x):
return x.startswith('\xa0')
# create list of lists for elements
elements = [list(j) for i, j in groupby(data, key=condition) if not i]
# create list of headers
headers = [next(j) for i, j in groupby(data, key=condition) if i]
# chain list of lists, and use repeat for headers
df = pd.DataFrame({'A': list(chainer(LoL)),
'B': list(chainer(repeat(i, j) for i, j in \
zip(headers, map(len, elements))))})
print(df)
A B
0 element1 header1
1 element2 header1
2 element3 header1
3 element4 header2
4 element5 header2
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句