Python 如何使用Pandas列解析web上的文本?

Python 如何使用Pandas列解析web上的文本?,python,dictionary,nested,pandas,Python,Dictionary,Nested,Pandas,我已经在邮政编码的dataframe列上使用了map函数来创建一系列新的元组,然后可以将这些元组操作到一个新的dataframe中 def scrape_data(series_data): #A bit of code to create the URL goes here r = requests.get(url) root_content = r.content root = lxml.html.fromstring(root_content)

我已经在邮政编码的dataframe列上使用了map函数来创建一系列新的元组,然后可以将这些元组操作到一个新的dataframe中

def scrape_data(series_data):
    #A bit of code to create the URL goes here

    r = requests.get(url)
    root_content = r.content
    root = lxml.html.fromstring(root_content)

    address = root.cssselect(".lr_results ul")
    for place in address:
        address_property = place.cssselect("li a")[0].text
        house_type = place.cssselect("li")[1].text
        house_sell_price = place.cssselect("li")[2].text
        house_sell_date = place.cssselect("li")[3].text
        return address_property, house_type, house_sell_price, house_sell_date

df = postcode_subset['Postcode'].map(scrape_data)
虽然它在结果页上只有一个属性的情况下工作,但它无法为多个属性创建元组

我希望能够迭代一系列页面,然后将这些内容添加到数据帧中。我知道Pandas可以将嵌套的dict转换成数据帧,但要让它工作起来真的很困难。我试着用答案,但我迷路了


有人能帮我指出正确的方向吗?

目前,您的函数只返回
地址
中的第一个
位置
(通常在python中,您会
产生
(而不是
返回
),以作为生成器检索所有结果

当随后执行apply/map时,您通常希望函数返回一个序列

但是,我认为您只需要返回以下数据帧:

return pd.DataFrame([{'address_ property': place.cssselect("li a")[0].text,
                      'house_type': place.cssselect("li")[1].text,
                      'house_sell_price': place.cssselect("li")[2].text,
                      'house_sell_date': place.cssselect("li")[3].text}
                          for place in address],
                    index=address)

目前,您的函数只返回
地址中的第一个
位置
(通常在python中,您会
产生
(而不是
返回
),以作为生成器检索所有结果

当随后执行apply/map时,您通常希望函数返回一个序列

但是,我认为您只需要返回以下数据帧:

return pd.DataFrame([{'address_ property': place.cssselect("li a")[0].text,
                      'house_type': place.cssselect("li")[1].text,
                      'house_sell_price': place.cssselect("li")[2].text,
                      'house_sell_date': place.cssselect("li")[3].text}
                          for place in address],
                    index=address)

为了使代码正常工作,我最终修改了Andy Hayden的解决方案:

listed = []
    for place in address:
        results = [{'postcode':postcode_bit,'address_ property': place.cssselect("li a")[0].text,
                  'house_type': place.cssselect("li")[1].text,
                  'house_sell_price': place.cssselect("li")[2].text,
                  'house_sell_date': place.cssselect("li")[3].text}]

        listed.extend(results)
    return listed

至少我现在对Python数据结构的工作原理有了更多的了解。

为了让代码正常工作,我最终修改了Andy Hayden的解决方案:

listed = []
    for place in address:
        results = [{'postcode':postcode_bit,'address_ property': place.cssselect("li a")[0].text,
                  'house_type': place.cssselect("li")[1].text,
                  'house_sell_price': place.cssselect("li")[2].text,
                  'house_sell_date': place.cssselect("li")[3].text}]

        listed.extend(results)
    return listed

至少我现在对Python数据结构的工作原理有了更多的了解。

谢谢你,我会尝试一下。我对Python及其数据结构仍然很熟悉,尽管在我的工作中找到熊猫绝对值得努力学习。(也感谢你整理我的代码)返回的-SyntaxError:Generator表达式如果不是唯一的参数,则必须用括号括起来-但不太确定将括号放在哪里。@elksie5000呜呜!通过将其作为列表理解进行更正(很抱歉,我在测试中这样做了).那太棒了-在你的帮助下,速度非常快。非常感谢你抽出时间。谢谢你-我会尝试一下。我对Python及其数据结构仍然非常了解,尽管在我的工作中找到熊猫绝对值得努力学习。(也感谢你整理我的代码)返回的-SyntaxError:Generator表达式如果不是唯一的参数,则必须用括号括起来-但不太确定将括号放在哪里。@elksie5000呜呜!通过使其成为列表理解(抱歉,我在测试中这样做了)。这太棒了-在您的帮助下,速度非常快。非常感谢您的时间。