如何加速附加到现有数据框

时间:2015-09-28 12:31:23

标签: python pandas

我正在尝试向现有数据框追加或添加行,该数据框有大约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 pandas中更好的方法吗?

1 个答案:

答案 0 :(得分:1)

如果您需要按条件附加行,则可以使用np.where

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