如何加速追加到现有的数据框架



我正在尝试追加或添加行到现有的数据框架,其中有大约700万行。

现在我面临的挑战是我能够以以下方式使用iterrows做同样的事情:

for key,value in df.iterrows():
                if value['col3'] > 0:
                    df.loc[len(df),['col1','col2','col3','col4','col5']] = [value['col1']+value['col3'],value['col2'],value['col3'],value['col4'],'blah']

和以下方式使用itertuples:

for tup in df.itertuples(index = False):
                if tup[4] > 0:
                    df.loc[len(df),['col1','col2','col3','col4','col5']] = [tup[1]+ tup[3],tup[2], tup[3],tup[4],'blah']

这两种方法都可以完成工作,但是会占用处理时间。

谁能给我一个更好的方法在Python熊猫中做到这一点?

您可以使用np。其中,如果需要按条件追加行:

import pandas as pd
import numpy as np
import io
#original data
temp=u"""col1,col2,col3,col4,col5
1,2,3,4,5
3,4,-5,6,7
5,6,-7,8,9"""
df1 = pd.read_csv(io.StringIO(temp))
print df1
#   col1  col2  col3  col4  col5
#0     1     2     3     4     5
#1     3     4    -5     6     7
#2     5     6    -7     8     9
#copy data for next processing
df = df1.copy()
#set data by conditions
df1['col1'] = np.where(df1['col3'] > 0,  df1['col1'] + df1['col3'], np.NaN)
df1['col5'] = np.where(df1['col3'] > 0,  'blah', np.NaN)
#drop rows with NaN
df1 = df1.dropna()
#append to original df
result = pd.concat([df, df1], ignore_index=True)
print result
#   col1  col2  col3  col4  col5
#0     1     2     3     4     5
#1     3     4    -5     6     7
#2     5     6    -7     8     9
#3     4     2     3     4  blah    

最新更新