簡體   English   中英

不能連接 ' 類型的 object<class 'list'> ' 從 df.append 轉換為 pd.concat 時</class>

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM