[英]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.