[英]cannot concatenate object of type '<class 'list'>' when convering from df.append to 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
經過一些研究,我將我的字典轉換為列表,然后開始連接,但現在我得到了
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() 用於數據幀。 您只需要使用 tmp 列表創建 dataframe。 也許您可以使用我實際上不知道的 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]}
和 append 線:
tmp = tmp.append(pd.DataFrame(row))
不要忘記將 tmp 重置為 dataframe:
tmp = pd.DataFrame()
pd.concat
用於連接兩個或多個 pandas 對象。 如果您已成功構建包含數據的字典列表(您在tmp
變量中擁有),那么您可以使用默認的pd.DataFrame
構造函數將其轉換為 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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.