python - 聚合前删除空行
问题描述
我有一个数据帧列表(带有 datetimeindex),每个数据帧中两行之间的最短时间(日期)为 15 分钟。我想使用平均值、中值、几何平均值和其他方法将所有数据帧(按天)分组。问题是有些日子在所有数据框中都不包含任何数据。一些方法,比如mean,会忽略它,但使用其他方法会导致错误。我的问题是如何在应用该方法之前删除这些日子?
数据:
[ col1 col2 col3 col4
date
2020-02-03 08:00:00+00:00 3.616141 3.362717 1.627347 2.242732
2020-02-03 08:15:00+00:00 4.043727 3.749407 1.790467 2.272293
2020-02-03 08:30:00+00:00 3.872196 3.595969 1.729359 2.221447
... ... ... ... ...
2020-12-25 08:45:00+00:00 6.645853 1.352785 0.081961 4.112518
2020-12-25 09:30:00+00:00 6.066697 1.068805 0.058980 3.991505
[2204 rows x 6 columns],
...]
聚合后的数据均值:
col1 col2 col3 col4
date
2020-02-02 00:00:00+00:00 4.636509 0.842644 0.069093 1.393849
2020-02-03 00:00:00+00:00 6.649390 1.077993 0.081713 1.798794
2020-02-04 00:00:00+00:00 5.765083 1.113354 0.097113 1.668112
2020-02-05 00:00:00+00:00 NaN NaN NaN NaN
2020-02-06 00:00:00+00:00 NaN NaN NaN NaN
... ... ... ... ...
如您所见,02/05 和 02/06 这两天都没有数据。
我的代码与返回错误的 gstd 聚合:
from scipy.stats import gstd
cols = ["col1", "col2","col3","col4"]
joined = pd.concat(df.reset_index() for df in datalist)
joined = joined.replace({np.nan:1, 0:1})
joined[cols] = joined[cols].mask(joined[cols] < 0, 1)
df = joined.set_index('date').groupby(pd.Grouper(freq='D'))
std = df.apply(gstd)
#std = df.agg(gstd)
错误:
ValueError: Degrees of freedom <= 0 for slice
解决方案
你有没有尝试过
df.dropna()
?
这将删除包含至少一个空值的行。
推荐阅读
- python - VSCode:无法在 Docker 容器上远程调试 python 脚本,因为连接失败
- sql - 无法将表复制到新表中
- sharepoint-online - SharePoint Online - React 现代脚本编辑器 - 安装问题
- r - 数据框中每组的一组选定列的 JSON 汇总列
- android - 捕获错误但继续迭代列表
- python - 有谁知道如何设置具有升级和降级特殊要求的条带特定订阅?
- javascript - 是否可以通过应用程序脚本知道谁是最后修改事件的用户
- java - java - 如何根据用户在java中的输入(扫描仪)计算脚本中的字符串、数字和双精度数?
- node.js - 将文件从 Angular 发送到 Nodejs - 无法读取未定义的属性“标题”
- java - iot-service-client azure-iot-sdk java 的企业代理