我有一个小解析器,它正在收集pandas-df的RSS提要通道。一切如预期,但我得到了这个警告
The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead
经过一些研究,我将dicts转换为list,然后开始连接,但现在我得到了
type '<class 'list'>'; only Series and DataFrame objs are valid
如何重写for循环以获得预期结果
带警告的工作代码
df = pd.DataFrame(columns = ['title', 'link'])
with response as r:
items = r.html.find('item', first=False)
for item in items:
title = item.find('title', first=True).text
link = item.find('guid', first=True).text
row = {'title': title, 'link': link}
df = df.append(row, ignore_index=True)
轻微修改,产生错误
df = pd.DataFrame(columns = ['title', 'link'])
tmp = []
with response as r:
items = r.html.find('item', first=False)
for item in items:
title = item.find('title', first=True).text
link = item.find('guid', first=True).text
row = [title, link]
tmp.append(row)
df = pd.concat(tmp)
pd.concat
用于连接两个或多个panda对象。如果您成功构建了一个包含数据的dict列表(位于tmp
变量中(,则只需使用默认的pd.DataFrame
构造函数即可将其转换为数据帧:
df = pd.DataFrame(columns = ['title', 'link'])
tmp = []
with response as r:
items = r.html.find('item', first=False)
for item in items:
title = item.find('title', first=True).text
link = item.find('guid', first=True).text
row = {'title': title, 'link': link}
tmp.append(row)
df = pd.DataFrame(tmp)
您可以对数据帧使用pd.contat((。您只需要使用tmp列表创建您的数据帧。也许你可以用pd.read_html获取数据,我其实不知道。
tmp = []
with response as r:
items = r.html.find('item', first=False)
for item in items:
title = item.find('title', first=True).text
link = item.find('guid', first=True).text
row = [title, link]
tmp.append(row)
df = pd.DataFrame(tmp, columns=['title', 'link'])
您需要将row
更改为dict,例如:
row = {'col1': [title], 'col2': [link]}
和附加行到:
tmp = tmp.append(pd.DataFrame(row))
不要忘记将tmp重置为dataframe:
tmp = pd.DataFrame()