2016-09-21 157 views
-2

我是新来的大熊猫,并在试图遍历行通过一个循环我收到的大熊猫无效的语法错误

下面以一个无效的语法错误是我试图

for index, row in df.iterrows(): 
if ((df['c1'] == 'cond1')&(df['c2']=='cond2')): 
df['c3']='cond2' 
elif ((df['c1'] == 'cond3')&(df['c2']=='cond2')): 
df['c3']='cond2' 
elif ((df['c1'] == 'cond4')&(df['c2']=='cond2')): 
df['c3']='cond2' 
else: 
df['c3']='Nan' 
df 
代码
+4

你都清楚地失踪缩进。请阅读关于如何在Python中编写循环和条件的教程。 – sisanared

+1

你也应该粘贴错误的回溯。你可以在这里阅读缩进: https://docs.python.org/release/2.5.1/ref/indentation.html – noonewin

回答

0

我认为你可以使用ix,但是你确定你总是需要字符串cond2转到列c3

df['c3']='Nan' 
df.ix[(df['c1'] == 'cond1')&(df['c2']=='cond2'), 'df3'] = 'cond2' 
df.ix[(df['c1'] == 'cond3')&(df['c2']=='cond2'), 'df3'] = 'cond2' 
df.ix[(df['c1'] == 'cond4')&(df['c2']=='cond2'), 'df3'] = 'cond2' 

样品:

import pandas as pd 
import numpy as np 

df = pd.DataFrame({'c1':['cond1','cond2','cond3','cond4'], 
        'c2':['cond2','cond2','cond2','cond2']}) 

print (df) 
     c1  c2 
0 cond1 cond2 
1 cond2 cond2 
2 cond3 cond2 
3 cond4 cond2 

#set to NaN value 
df['c3']= np.nan 
#set to string 'Nan' 
#df['c3']= 'Nan' 

df.ix[(df['c1'] == 'cond1')&(df['c2']=='cond2'), 'c3'] = 'a' 
df.ix[(df['c1'] == 'cond3')&(df['c2']=='cond2'), 'c3'] = 'b' 
df.ix[(df['c1'] == 'cond4')&(df['c2']=='cond2'), 'c3'] = 'c' 
print (df) 
     c1  c2 c3 
0 cond1 cond2 a 
1 cond2 cond2 NaN 
2 cond3 cond2 b 
3 cond4 cond2 c 

循环的解决方案是非常缓慢的,但如果需要的话,你需要在循环使用row代替df

import pandas as pd 
import numpy as np 

df = pd.DataFrame({'c1':['cond1','cond2','cond3','cond4'], 
        'c2':['cond2','cond2','cond2','cond2']}) 

print (df) 

df['c3'] = '' 
for index, row in df.iterrows(): 
    if ((row['c1'] == 'cond1')&(row['c2']=='cond2')): 
     row['c3']='a' 
    elif ((row['c1'] == 'cond3')&(row['c2']=='cond2')): 
     row['c3']='b' 
    elif ((row['c1'] == 'cond4')&(row['c2']=='cond2')): 
     row['c3']='c' 
    else: 
     row['c3']=np.nan 

print (df) 
     c1  c2 c3 
0 cond1 cond2 a 
1 cond2 cond2 NaN 
2 cond3 cond2 b 
3 cond4 cond2 c 
+0

这段代码可能会让一些正在学习用Python编写代码的人感到困惑。 – sisanared