Pandas 如何在数据帧共享x轴图中以不同的条件循环遍历每列
请原谅新用户的任何明显错误 我有一个数据框,其中的列需要单独清理,因为它们有不同数量的有效条目。我的目标是对每天、每月和每年的数据重新采样,并为每个列绘制每日、每月和每年的数据(作为时间序列)。我希望为每列显示一个共享的x轴、多个y轴绘图,显示每日、每月和每年的系列。 如果我在整个数据帧上运行drona()和resample函数,它将为每个重采样操作生成一个空数据帧。我的猜测是,它正在删除所有包含一列NaN的行 因此,我考虑过滤掉循环中的每一列,并创建一次过滤一列的子数据帧。最后,我可以为生成的每个较小的帧绘制一个共享的x轴图 有没有更好的方法来实现我的目标 这是我的数据帧:Pandas 如何在数据帧共享x轴图中以不同的条件循环遍历每列,pandas,loops,for-loop,Pandas,Loops,For Loop,请原谅新用户的任何明显错误 我有一个数据框,其中的列需要单独清理,因为它们有不同数量的有效条目。我的目标是对每天、每月和每年的数据重新采样,并为每个列绘制每日、每月和每年的数据(作为时间序列)。我希望为每列显示一个共享的x轴、多个y轴绘图,显示每日、每月和每年的系列。 如果我在整个数据帧上运行drona()和resample函数,它将为每个重采样操作生成一个空数据帧。我的猜测是,它正在删除所有包含一列NaN的行 因此,我考虑过滤掉循环中的每一列,并创建一次过滤一列的子数据帧。最后,我可以为生成的
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'对象没有属性“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)
您应该提供DataFrame的一个示例,并说明需要对每个列进行何种清理。在这种情况下,可能不需要在列中循环。另外,您是否尝试了您提供的代码?什么错误或它的输出与期望的输出有什么不同?我已经做了更改;你现在能查一下吗?谢谢问题是df.i的行
df.i
。您可以在dataframe
中作为属性访问列,但是使用df.i
您试图访问属性i
,而不是通过变量i
的值来访问其值的列。这就是错误所说的。正如@DOOM所提到的,错误将通过用df[i]替换df.i来修复。而且,你循环中的一些步骤对我来说没有意义。你能解释一下你在每一个项目上都想完成什么吗?此外,提供所需的输出。最后的数据帧应该是什么样子?谢谢@teoeme139和DOOM。我已经重新表述了我的问题。也许现在它更明确了。谢谢@teoeme139。我一直在使用你的方法,但它没有给我所需的结果。我对数据框进行了更改,使其更能描述我的问题。在这种情况下,你能提出解决方案吗?我做了一些修改。如果有改进,请告诉我
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