无效的语法错误
问题描述:
我是新来的大熊猫,并在试图遍历行通过一个循环我收到的大熊猫无效的语法错误
下面以一个无效的语法错误是我试图
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
代码
答
我认为你可以使用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
你都清楚地失踪缩进。请阅读关于如何在Python中编写循环和条件的教程。 – sisanared
你也应该粘贴错误的回溯。你可以在这里阅读缩进: https://docs.python.org/release/2.5.1/ref/indentation.html – noonewin