python - 无法连接类型为“的对象”"; 只有 pd.Series、pd.DataFrame 和 pd.Panel(已弃用)obj 有效
问题描述
我这里有 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)'
解决方案
一般来说,在 pandas 中构建 DataFrame 时,最好将数据收集到本机集合(列表、字典、元组)中,然后最后将它们转换为 DataFrame。将单元格或行逐位添加到 DataFrame 很慢。
您在这里遇到的具体错误是 append 仅适用于组合 pandas 对象。
您可以使用.loc
assignment 来做您所描述的事情,但不建议这样做:
for i, value in enumerate(Sp.values):
seasons.loc[i, 'Winter'] = value
但是您提取值的方式让我认为新表在这里没有最有意义。
最好向 df2 添加一个名为 Season 的新列,根据日期将每一行标记为 Winter、Summer 等。然后你可以使用groupby('Season')
或query('Season == "Winter"')
逐季提取数据。
要创建 Season 列,您只需要一个函数来告诉您一行所在的季节。我不知道您的表中有什么,而且我对 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]
推荐阅读
- leaflet - 用传单地工在多边形上切孔
- python - pytest`AssertionError: View function mapping is overwritten an existing endpoint function:`flask-restful while registring blueprint
- java - 基于按钮动作从Mysql动态检索信息
- excel - 如何从 Excel 导出到具有特定大小(或纵横比)的图像?
- flutter - Flutter - 并排的容器列表
- javascript - 从不作为 IIFE 工作的节点列表创建简单数组
- powershell - powershell Write-Output with >> to a file.txt -Append
- reactjs - 如何在 MuiDatatables 中的另一个数组内的数组内呈现嵌套对象的属性?
- jquery - jQuery 点击处理程序总是在表格的第一个可用行中抓取按钮,而不是实际点击的那个
- r - 数据表是否保证按计算分组后的顺序相同?