我正在尝试追加或添加行到现有的数据框架,其中有大约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