【问题标题】:How to resolve ValueError Length mismatch Expected axis has 0 elements, new values have 7 elements如何解决 ValueError 长度不匹配 预期轴有 0 个元素,新值有 7 个元素
【发布时间】:2019-12-15 10:22:18
【问题描述】:

我目前在此错误上停留了一段时间。

lond 数据框有 6807 行 x 15 列。列名是社区、社区列表、平均价格、邮政编码、自治市镇、社区邮政编码、纬度、经度、最近的火车站、到车站的距离、伦敦区、物业类型、房间类型、价格、位置评分。

我想要实现的是使用该功能执行以下操作。

  1. 提取每个社区的地理坐标。
  2. 为每个社区提取半径 200m 范围内排名前 100 的场馆(包括类别类型)。
  3. 清理 json 数据并将数据转换为 pandas 数据框。

请帮助我。这是我的第一个如此规模的项目。

    #Defining the to get nearby venues
    def getNearbyVenues(names, latitudes, longitudes, radius=100):

        venues_list=[]
        for name, lat, lng in zip(names, latitudes, longitudes):
            print(name)

            # Creating the API request URL
            url = 'https://api.foursquare.com/v2/venues/explore?&client_id={}&client_secret={}&v={}&ll= 
            {},{}&radius={}&limit={}'.format(
                CLIENT_ID, 
                CLIENT_SECRET, 
                VERSION, 
                lat, 
                lng, 
                radius, 
                LIMIT)

            # Making the GET request to extract json data
            #results = requests.get(url).json()["response"]['groups'][0]['items']
            results = requests.get(url).json()["response"]#['groups'][0]['items']
            # return only relevant information for each nearby venue
            venues_list.append([(
                name, 
                lat, 
                longi, 
                v['venue']['name'], 
                v['venue']['location']['lat'], 
                v['venue']['location']['lng'],  
                v['venue']['categories'][0]['name']) for v in results])

        nearby_venues = pd.DataFrame([item for venue_list in venues_list for item in venue_list])
        nearby_venues.columns = ['Neighbourhood', 
                      'Neighbourhood Latitude', 
                      'Neighbourhood Longitude', 
                      'Venue', 
                      'Venue Latitude', 
                      'Venue Longitude', 
                      'Venue Category']

        return(nearby_venues)

    #Calling the getNearbyVenues function for each neighbourhood to create a dataframe lon_venues
    lond = lon_neighbs201.head(600)
    LIMIT = 10
    lon_venues = getNearbyVenues (names = lond['Neighbourhood'],
                                           latitudes = lond['Latitude'],
                                           longitudes = lond['Longitude']
                                          )
    lon_venues

【问题讨论】:

  • 我会从检查 df: nearby_venues 开始,在该行之前为它定义列,即 nearby_venues.columns=... 它可能没有 7 列(根据错误消息)。跨度>

标签: python pandas dataframe


【解决方案1】:

我认为,更直观的构造将是:

  1. 将循环中的 append 更改为 extend。这样 venues_list 将是 元组列表。每个内部元组将包含每一行的数据,并且 外部列表将是“行”列表。

  2. 当您创建 nearby_venues 时,只传递 venues_list 作为第一个 参数(而不是到目前为止的列表理解)。

  3. 无需在单独的指令中设置列名。 列列表可以作为指令中的 columns 参数传递 创建 DataFrame。

所以 nearby_venues 的创建应该如下所示:

nearby_venues = pd.DataFrame(venues_list, columns = ['Neighbourhood',
    'Neighbourhood Latitude', 'Neighbourhood Longitude', 'Venue',
    'Venue Latitude', 'Venue Longitude', 'Venue Category'])

【讨论】:

    猜你喜欢
    • 2020-07-10
    • 2020-12-18
    • 2017-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-23
    • 2020-09-09
    • 1970-01-01
    相关资源
    最近更新 更多