簡體   English   中英

無法連接“類型”的 object<class 'float'> ";只有 pd.Series、pd.DataFrame 和 pd.Panel(已棄用)obj 有效</class>

[英]cannot concatenate object of type "<class 'float'>"; only pd.Series, pd.DataFrame, and pd.Panel (deprecated) objs are valid

我這里有 df2,它是從 1 月 1 日到 8 月 26 日的一系列值。我創建了一個新的數據框,定義了那里的列 spring 夏季和秋季。 我想將每個季節的每個日期范圍內的值移動到新 dataframe 中的相應列中。 我收到了這個錯誤,不確定接下來要去哪里 go。 有人有想法么?

'print(df2)
seasons = (pd.DataFrame(columns = ['Winter','Spring','Summer', 'Autumn']))
Sp = df2[pd.date_range(start = '01/01/2020', end = '28/02/2020')]
for value in Sp:
    if value >0:
        seasons['Winter'].append(value)'

一般來說,當在 pandas 中構建 DataFrames 時,最好在原生 collections(列表、字典、元組)中收集數據,然后在最后將它們轉換為 ZBA834BA059A9A379459C112175EB8。 將單元格或行逐位添加到 DataFrame 很慢。

您在這里遇到的具體錯誤是 append 僅適用於組合 pandas 對象。

您可以使用.loc分配來執行您所描述的操作,但不建議這樣做:

for i, value in enumerate(Sp.values):
    seasons.loc[i, 'Winter'] = value

但是您提取值的方式讓我認為新表在這里沒有最有意義。

最好向 df2 添加一個名為 Season 的新列,根據日期將每一行標記為 Winter、Summer 等。 然后您可以使用groupby('Season')query('Season == "Winter"')逐季提取數據。

要創建 Season 列,您只需要一個 function 即可告訴您一行所在的季節。我不知道您的表中有什么,而且我對 datetime 對象不太擅長,但它會采用這種形式:

def assign_season(index):
    season = ...
    return season

然后,您使用以下內容創建列:

df2['Season'] = [assign_season(x) for x in df.index]

不必使用索引,可以使用列,但形式基本相同。 只需確保 function 專為您傳遞給它的內容而設計。 您還可以關閉多個列值:

def assign_season(val1, val2):
    ...

df2['Season'] = [assign_season(*vals) 
                 for vals in df2[['Column1', 'Column2']].values] 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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