pandas - 如何在熊猫数据框中循环遍历具有不同条件的每一列-共享x轴图
问题描述
请原谅新的低信心熊猫用户的任何明显错误。
我有一个数据框,其中的列需要单独清理,因为它们具有不同数量的有效条目。我的目标是每天、每月和每年重新采样数据,并为每一列绘制每日、每月和每年的数据(作为时间序列)。我想要一个共享的 x 轴,每个列的多个 y 轴图,显示每日、每月和每年的系列。
如果我在整个数据帧上运行 drona() 和重采样函数,它会为每个重采样操作生成一个空数据帧。我的猜测是,它正在删除所有包含一列 NaN 的行。
所以,我想在一个循环中过滤掉每一列,并创建一次过滤一列的子数据框。最后,我可以为生成的每个较小的帧绘制一个共享的 x 轴图。
有没有更好的方法来实现我的目标?
这是我的数据框:
col1 col2 col3 col4 col5
date
2015-01-03 00:00:00 None 32 42 None 3
2015-01-03 01:00:00 45 34 34 78 1.5
2015-01-03 02:00:00 None 53.5 NaN None 1.5
这是我用于循环列和应用条件的代码的一部分:
for i in df.columns:
print (i)
df.[i]= pd.to_numeric(df.i,errors='coerce' )
df=df[df['i'].notna()]
df = df[df['i'] >= 0]
df=df.filter (items = [i])
#Resampling :
df_hour = df['i'].resample('h').apply(lambda x: x.mean() if x.count()>1 else np.nan)
df_hour_fix = df_hour[df_hour != np.nan]
print (df_hour_fix)
运行它,这个错误突然出现: 'DataFrame' object has no attribute 'i'
解决方案
看看这是否有帮助,是否能引导你正确的方式。我使用了不同的 df 来处理更多数据
col1 col2 col3 col4 col5
2000-01-01 00:00:00 NaN 0 0 NaN 0
2000-01-01 01:00:00 3.0 1 1 NaN 1
2000-01-01 02:00:00 4.0 2 2 NaN 2
2000-01-01 03:00:00 5.0 3 3 NaN 3
2000-01-01 04:00:00 NaN 4 4 NaN 4
2000-01-01 05:00:00 2.0 5 5 NaN 5
2000-01-01 06:00:00 9.0 6 6 NaN 6
2000-01-01 07:00:00 NaN 7 7 NaN 7
2000-01-01 08:00:00 NaN 8 8 NaN 8
避免循环。我会通过以下方式清理 df:
df = df.apply(pd.to_numeric)
df = df.mask(df<0)
最后,每 2 小时重新采样一次 df 并计算平均值。mean 方法的默认值是忽略 NaN。所以你可以在你的 df 中使用 NaN 安全地执行它。
df_hour = df.resample('2H').mean()
col1 col2 col3 col4 col5
2000-01-01 00:00:00 3.0 0.5 0.5 NaN 0.5
2000-01-01 02:00:00 4.5 2.5 2.5 NaN 2.5
2000-01-01 04:00:00 2.0 4.5 4.5 NaN 4.5
2000-01-01 06:00:00 9.0 6.5 6.5 NaN 6.5
2000-01-01 08:00:00 NaN 8.0 8.0 NaN 8.0
推荐阅读
- spring-security - 如何使用 keycloak 保护 Spring Cloud 数据流服务器?
- sql - 查找两列重复记录的唯一记录
- javascript - 在 Angular 项目中添加自定义脚本的最佳方式(Materialize 示例)
- javascript - 如何在数组中的字符串之间插入单词?
- python - 如何用另一个数组调用数组中的特定元素?
- python - 具有类变量继承的子类
- python - 如果在 Pandas 的任一列中找到,则删除两个 float64 值
- ionic-framework - Ionic 3 显示数据目录图片
- lambda - 遍历 Kotlin 中的 lambda
- c# - linq2db 使用 2 个不同的数据库来迁移数据库