从 df.append 聚合到 pd.concat 时无法连接类型为"<类'列表'>"的对象



我有一个小解析器,它正在收集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()

相关内容

最新更新