繁体   English   中英

如何逐个单元地填充具有循环的零列的空熊猫数据框?

[英]How to fill cell by cell of an empty pandas dataframe which has zero columns with a loop?

我需要抓取数百个页面,而不是存储每个页面的整个 json,我只想将每个页面的几列存储到 Pandas 数据框中。 但是,在开始时数据框为空时,我遇到了问题。 我需要填充一个没有任何列或行的空数据框。 所以下面的循环不能正常工作:

import pandas as pd
import requests


cids = [4100,4101,4102,4103,4104]
df = pd.DataFrame()

for i in cids:
    url_info = requests.get(f'myurl/{i}/profile')
    jdata = url_info.json()
    df['Customer_id'] = i
    df['Name'] = jdata['user']['profile']['Name']
    ...

在这种情况下,我该怎么办?

您可以通过使用enumerate()loc来解决这个问题:

for index, i in enumerate(cids):
    url_info = requests.get(f'myurl/{i}/profile')
    jdata = url_info.json()
    df.loc[index, 'Customer_id'] = i
    df.loc[index, 'Name'] = jdata['user']['profile']['Name']

如果您在创建空数据df = pd.DataFrame(columns = ['Customer_id', 'Name'])时指定列名称,如下所示: df = pd.DataFrame(columns = ['Customer_id', 'Name'])然后您可以使用以下命令附加新数据: df = df.append({'Customer_id' : i, 'Name' : jdata['user']['profile']['Name']}, ignore_index=True) (加上您填充的任何其他列)然后您可以向for 循环每次迭代的数据框。

import pandas as pd
import requests


cids = [4100,4101,4102,4103,4104]
df = pd.DataFrame(columns = ['Customer_id', 'Name'])

for i in cids:
    url_info = requests.get(f'myurl/{i}/profile')
    jdata = url_info.json()
    df = df.append({'Customer_id' : i, 'Name' : jdata['user']['profile']['Name']}, ignore_index=True)

应该注意的是,在循环中对 DataFrame 使用 append 通常效率低下(参见此处),因此更好的方法是将结果保存为列表列表 (df_data),然后将其转换为 DataFrame,如下所示:

cids = [4100,4101,4102,4103,4104]
df_data = []

for i in cids:
    url_info = requests.get(f'myurl/{i}/profile')
    jdata = url_info.json()
    df_data.append([i, jdata['user']['profile']['Name']])
    
df = pd.DataFrame(df_data, columns = ['Customer_id', 'Name'])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM