从数据帧中获取特定数据值 - python pandas

时间:2017-05-03 02:18:00

标签: python pandas dataframe

我使用pandas在Python中有一个数据框。它有2列名为' dropoff_latitude'和' pickup_latitude'。我想创建一个函数,根据这两个变量创建第3列(通过api运行它们)。

所以我写了一个函数:

def dropoff_info(row):
    dropoff_latitude = row['dropoff_latitude']
    dropoff_longitude = row['dropoff_longitude']
    dropoff_url2 = "http://data.fcc.gov/api/block/find?format=json&latitude=%s&longitude=%s&showall=true" %(dropoff_latitude,dropoff_longitude)
    dropoff_resp2 = requests.get(dropoff_url2)
    dropoff_results2 = json.loads(dropoff_resp2.text)
    dropoffinfo =  dropoff_results2["Block"]["FIPS"][2:11]
    return dropoffinfo

然后我会把它当作     df [' newcolumn'] = dropoffinfo(df)

但它不起作用。

在排除故障后,我发现当我打印dropoff_latitude时,它看起来像这样:

0     40.773345947265625
1     40.762149810791016
2     40.770393371582031
...

所以我认为URL无法生成。我希望dropoff_latitude在打印时看起来像这样:

40.773345947265625
40.762149810791016
40.770393371582031
...

而且我不知道如何指定我只想要实际的内容部分。

当我尝试

dropoff_latitude = row['dropoff_latitude'][1]
dropoff_longitude = row['dropoff_longitude'][1]

它只是给了我第一排的值,所以显然没有用。

想法好吗?我对使用数据帧非常陌生......谢谢!

1 个答案:

答案 0 :(得分:0)

Alex - 对于pandas,我们通常喜欢避免循环,但在您的特定情况下,需要ping远程服务器以获取数据非常需要它。所以我做了以下的事情:

l = []
for i in df.index:
    dropoff_latitude = df.loc[i, 'dropoff_latitude']
    dropoff_longitude = df.loc[i, 'dropoff_longitude']
    dropoff_url2 = "http://data.fcc.gov/api/block/find?format=json&latitude=%s&longitude=%s&showall=true" %(dropoff_latitude,dropoff_longitude)
    dropoff_resp2 = requests.get(dropoff_url2)
    dropoff_results2 = json.loads(dropoff_resp2.text)
    l.append(dropoff_results2["Block"]["FIPS"][2:11])

df['new'] = l

此处的关键是.loc[i, ...]位,使您能够逐个遍历每一行,并调出相关列以创建要发送到API的变量。

关于你的记忆消耗的问题 - 这比我的工资等级略高,但在这种情况下,我真的不认为你有任何其他选择(除非你的API有某种批量请求,允许您在一次调用中提取更大的数据集。)