将多个元素附加到数据框-问答-阿里云开发者社区-阿里云

开发者社区> 一码平川MACHEL> 正文

将多个元素附加到数据框

2019-01-23 17:11:33 1097 1

我有一个从zillow中提取大量变量的函数。我使用lambda函数将返回的值附加到数据帧。我想知道是否有更快的方法来返回所有变量并将它们附加到数据帧而不是单独。

这是我的代码:

from xml.dom.minidom import parse,parseString
import xml.dom.minidom
import requests
import sys
import pandas as pd
import numpy as np

l_zwsid=''

df = pd.read_csv('data.csv')

def getElementValue(p_dom,p_element):

if len(p_dom.getElementsByTagName(p_element)) > 0:
   l_value=p_dom.getElementsByTagName(p_element)[0]
   return(l_value.firstChild.data)
else:
   l_value='NaN'
   return(l_value)

def getData(l_zwsid, a_addr, a_zip):

try:
    l_url='http://www.zillow.com/webservice/GetDeepSearchResults.htm?zws-id='+l_zwsid+'&address='+a_addr+'&citystatezip='+a_zip
    xml=requests.get(l_url)
    dom=parseString(xml.text)

    responses=dom.getElementsByTagName('response')

    zpid=getElementValue(dom,'zpid')
    usecode=getElementValue(dom,'useCode')
    taxyear=getElementValue(dom,'taxAssessmentYear')
    tax=getElementValue(dom,'taxAssessment')
    yearbuilt=getElementValue(dom,'yearBuilt')
    sqft=getElementValue(dom,'finishedSqFt')
    lotsize=getElementValue(dom,'lotSizeSqFt')
    bathrooms=getElementValue(dom,'bathrooms')
    bedrooms=getElementValue(dom,'bedrooms')
    totalrooms=getElementValue(dom,'totalRooms')
    lastSale=getElementValue(dom,'lastSoldDate')
    lastPrice=getElementValue(dom,'lastSoldPrice')
    latitude=getElementValue(dom, 'latitude')
    longitude=getElementValue(dom, 'longitude')

    for response in responses:
        addresses=response.getElementsByTagName('address')
        for addr in addresses:
            street=getElementValue(addr,'street')
            zipcode=getElementValue(addr,'zipcode')

        zestimates=response.getElementsByTagName('zestimate')
        for zest in zestimates:
            amt=getElementValue(zest,'amount')
            lastupdate=getElementValue(zest,'last-updated')
            valranges=zest.getElementsByTagName('valuationRange')
            for val in valranges:
                low=getElementValue(val,'low')
                high=getElementValue(val,'high')
    return longitude, latitude
except AttributeError:
    return None

df['Longtitude'] = df.apply(lambda row: getData(l_zwsid, row['Street'], row['Zip']), axis = 1)
df['Latitude'] = df.apply(lambda row: getData(l_zwsid, row['Street'], row['Zip']), axis = 1)
这当前不起作用,因为新列将包含经度和纬度。

取消 提交回答
全部回答(1)
  • 一码平川MACHEL
    2019-07-17 23:26:45

    你的getData函数返回一个元组,这就是为什么两列都有lat和lon的原因。一种解决方法可能是按如下方式对此函数进行参数化:

    def getData(l_zwsid, a_addr, a_zip, axis='lat'):

    valid = ['lat', 'lon']
    if axis not in valid:
        raise ValueError(f'axis must be one of {valid}')
    ...
    if axis == 'lat':
        return latitude
    else:
        return longitude

    然而,这不会提高效率会使其更慢。您的主要开销来自于为DataFrame中的每一行进行API调用,因此您受到网络性能的限制。

    0 0
相关问答

4

回答

Spark 【问答合集】

社区小助手 2019-05-29 14:13:40 123636浏览量 回答数 4

145

回答

【新手入门】云服务器linux使用手册

fanyue88888 2012-11-26 17:14:18 157032浏览量 回答数 145

28

回答

钉钉开放平台“常见问题常见问题常见问题“重要请关注

竹梅 2015-12-03 00:39:14 92807浏览量 回答数 28

3

回答

Logstash采集文件名称以及自定义格式的日志文件采集

Snorlax 2019-06-18 11:51:28 114619浏览量 回答数 3

22

回答

爬虫数据管理【问答合集】

我是管理员 2018-08-10 16:37:41 146738浏览量 回答数 22

31

回答

[@倚贤][¥20]刚学完html/css/js的新手学习servlet、jsp需要注意哪些问题?

弗洛伊德6 2018-10-27 21:52:43 145578浏览量 回答数 31

1

回答

出现这个问题求解决This XML file does not appear to have any

淘合肥 2017-04-08 21:07:00 88806浏览量 回答数 1

41

回答

【精品问答集锦】Python热门问题

小六码奴 2019-05-30 15:27:34 135447浏览量 回答数 41

249

回答

阿里云LNAMP(Linux + Nginx + Apache + MySQL + PHP)环境一键安装脚本

云代维 2014-02-14 15:26:06 302550浏览量 回答数 249

24

回答

【精品问答】python技术1000问(1)

问问小秘 2019-11-15 13:25:00 471174浏览量 回答数 24
47
文章
723
问答
问答排行榜
最热
最新
推荐问答
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载