无法连接类型为“<class'float'>”的对象;只有pd.Series、pd.DataFrame和pd.Panel(已弃用)OBJ有效

2024-04-26 00:45:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我这里有df2,它是从1月1日到8月26日的一系列值。我创建了一个新的数据框,定义了那里的列,春、夏、秋。我希望将每个季节的每个日期范围内的值移动到新数据框中的相应列中。我犯了这个错误,不知道下一步该怎么办。有人有什么想法吗

'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)'

Tags: columns数据dataframe定义value错误sppd
1条回答
网友
1楼 · 发布于 2024-04-26 00:45:57

通常,在pandas中构建数据帧时,最好在本机集合(列表、dict、元组)中收集数据,然后在最后将它们转换为数据帧。将单元格或行逐位添加到数据帧的速度很慢

这里出现的具体错误是append仅适用于组合pandas对象

您可以使用.loc赋值来执行所描述的操作,但不建议这样做:

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

但是你获取值的方式让我觉得新表在这里没有什么意义

最好在df2中添加一个名为“季节”的新列,根据日期将每行标记为冬季、夏季等。然后您可以使用groupby('Season')query('Season == "Winter"')逐季提取数据

要创建“季节”列,您只需要一个函数来告诉您行所在的季节。我不知道您的表中有什么,我对datetime对象不是很在行,但它的形式是:

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

然后使用以下内容创建列:

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

您不必使用索引,您可以使用列,但表单基本相同。只需确保函数是为您传递给它的内容而设计的。您还可以关闭多个列值:

def assign_season(val1, val2):
    ...

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

相关问题 更多 >