Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pandas 如何在数据帧共享x轴图中以不同的条件循环遍历每列_Pandas_Loops_For Loop - Fatal编程技术网

Pandas 如何在数据帧共享x轴图中以不同的条件循环遍历每列

Pandas 如何在数据帧共享x轴图中以不同的条件循环遍历每列,pandas,loops,for-loop,Pandas,Loops,For Loop,请原谅新用户的任何明显错误 我有一个数据框,其中的列需要单独清理,因为它们有不同数量的有效条目。我的目标是对每天、每月和每年的数据重新采样,并为每个列绘制每日、每月和每年的数据(作为时间序列)。我希望为每列显示一个共享的x轴、多个y轴绘图,显示每日、每月和每年的系列。 如果我在整个数据帧上运行drona()和resample函数,它将为每个重采样操作生成一个空数据帧。我的猜测是,它正在删除所有包含一列NaN的行 因此,我考虑过滤掉循环中的每一列,并创建一次过滤一列的子数据帧。最后,我可以为生成的

请原谅新用户的任何明显错误

我有一个数据框,其中的列需要单独清理,因为它们有不同数量的有效条目。我的目标是对每天、每月和每年的数据重新采样,并为每个列绘制每日、每月和每年的数据(作为时间序列)。我希望为每列显示一个共享的x轴、多个y轴绘图,显示每日、每月和每年的系列。

如果我在整个数据帧上运行drona()和resample函数,它将为每个重采样操作生成一个空数据帧。我的猜测是,它正在删除所有包含一列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'对象没有属性“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