Python 3.x 如何在这个python脚本中避免for循环

Python 3.x 如何在这个python脚本中避免for循环,python-3.x,pandas,numpy,pandas-groupby,Python 3.x,Pandas,Numpy,Pandas Groupby,我正在做一些数据分析任务,使用这个python脚本我可以得到我想要的结果,但是它非常慢,可能是因为for循环,我必须处理数百万个数据行,有没有办法将这个脚本改为fast df=df.sort_values(by='ts') df = df.set_index(pd.DatetimeIndex(df['ts'])) df = df.rename(columns={'ts': 'Time'}) x2=df.groupby(pd.Grouper(freq='1D', base=30, label='r

我正在做一些数据分析任务,使用这个python脚本我可以得到我想要的结果,但是它非常慢,可能是因为for循环,我必须处理数百万个数据行,有没有办法将这个脚本改为fast

df=df.sort_values(by='ts')
df = df.set_index(pd.DatetimeIndex(df['ts']))
df = df.rename(columns={'ts': 'Time'})
x2=df.groupby(pd.Grouper(freq='1D', base=30, label='right'))
for name, df1 in x2:
    df1_split=np.array_split(df1,2)
    df_first=df1_split[0]
    df_second=df1_split[1]
    length_1=len(df_first)
    length_2=len(df_second)
    if len(df_first)>=5000:
        df_first_diff_max=abs(df_first['A'].diff(periods=1)).max()
        if df_first_diff_max<=10:
            time_first=df_first['Time'].values[0]
            time_first=pd.DataFrame([time_first],columns=['start_time'])
            time_first['End_Time']=df_first['Time'].values[-1]
            time_first['flag']=1
            time_first['mean_B']=np.mean(df_first['B'])
            time_first['mean_C']=np.mean(df_first['C'])
            time_first['mean_D']=np.mean(df_first['D'])
            time_first['E']=df_first['E'].values[0]
            time_first['F']=df_first['F'].values[0]
            result.append(time_first)
    if len(df_second)>=5000:
        df_second_diff_max=abs(df_second['A'].diff(periods=1)).max()
        if df_second_diff_max<=10:
            print('2')
            time_first=df_second['Time'].values[0]
            time_first=pd.DataFrame([time_first],columns=['start_time'])
            time_first['End_Time']=df_second['Time'].values[-1]
            time_first['flag']=2
            time_first['mean_B']=np.mean(df_second['B'])
            time_first['mean_C']=np.mean(df_second['C'])
            time_first['mean_D']=np.mean(df_second['D'])
            time_first['E']=df_second['E'].values[0]
            time_first['F']=df_second['F'].values[0]
            result.append(time_first)

final=pd.concat(result)
df=df.sort_值(按class='ts')
df=df.set_索引(pd.DatetimeIndex(df['ts']))
df=df.rename(列={'ts':'Time'})
x2=df.groupby(pd.Grouper(freq='1D',base=30,label='right'))
对于名称,x2中的df1:
df1_split=np.数组_split(df1,2)
df_first=df1_分割[0]
df_秒=df1_分割[1]
长度_1=长度(df_优先)
长度_2=长度(df_秒)
如果len(df_first)>=5000:
df_first_diff_max=abs(df_first['A'].diff(periods=1)).max()
如果df_first_diff_max=5000:
df_second_diff_max=abs(df_second['A'].diff(periods=1)).max()

如果df_second_diff_max如果你想处理数百万行,如果你有足够的资源,也许你应该尝试使用Hadoop或Spark


我认为在一个节点中分析如此多的数据有点疯狂。

如果你想处理数百万行,如果你有足够的资源,也许你应该尝试使用Hadoop或Spark


我认为在单个节点中分析如此多的数据有点疯狂。

如果您愿意尝试与Pandas不同的东西,您可以尝试使用矢量化。这里有一个链接,可以快速概述遍历一组数据的时间。看起来Numpy有最有效的矢量化方法,但内部的方法可能也适用于您

  • 内置函数:iterrows()-321倍
  • apply()方法的速度提高了811倍
  • 熊猫矢量化-速度提高9280倍
  • Numpy矢量化-速度提高71803倍

(所有操作都根据65列1140行的数据帧上的操作计时)

如果您愿意尝试与Pandas不同的操作,您可以尝试使用矢量化。这里有一个链接,可以快速概述遍历一组数据的时间。看起来Numpy有最有效的矢量化方法,但内部的方法可能也适用于您

  • 内置函数:iterrows()-321倍
  • apply()方法的速度提高了811倍
  • 熊猫矢量化-速度提高9280倍
  • Numpy矢量化-速度提高71803倍

(所有操作都根据65列1140行的数据帧上的操作计时)

@使用hadoop,但是由于使用hadoop,for-loop@仍然很慢,但是由于for-loop@仍然很慢,这不是在并行环境中这样做的精神,需要做一些数据争用不是在并行环境中这样做的精神,需要做一些数据争用总是尽量避免发布链接,它们可能会过期总是尽量避免发布链接,它们可能会过期