应用Python lambda:if condition给出语法错误

时间:2018-03-16 22:51:16

标签: python-3.x if-statement lambda pandas-apply

这是我的数据集

fake_abalone2

   Sex   Length  Diameter  Height   Whole  Shucked  Viscera  Shell  Rings
                                    Weight  Weight  Weight  Weight
0   M    0.455    0.365    0.095    0.5140  0.2245  0.1010  0.1500  15
1   M    0.350    0.265    0.090    0.2255  0.0995  0.0485  0.0700  7
2   F    0.530    0.420    0.135    0.6770  0.2565  0.1415  0.2100  9
3   M    0.440    0.365    0.125    0.5160  0.2155  0.1140  0.1550  10
4   K    0.330    0.255    0.080    0.2050  0.0895  0.0395  0.0550  7
5   K    0.425    0.300    0.095    0.3515  0.1410  0.0775  0.1200  8

使用以下方法时出现语法错误。请帮帮我。 我想要" sex"表格改变取决于"戒指" table.If"戒指"值小于10相应的"性别"价值应改为' K'。否则,不应该在"性别"中进行更改。表

 fake_abalone2["sex"]=fake_abalone2["Rings"].apply(lambda x:"K" if x<10)
  

文件&#34;&#34;,第1行           fake_abalone2 [&#34; sex&#34;] = fake_abalone2 [&#34; Rings&#34;]。apply(lambda x:&#34; K&#34;如果x&lt; 10)

     

SyntaxError:语法无效

3 个答案:

答案 0 :(得分:2)

以下方法效果很好。

    df1["Sex"]=df1.apply(lambda x: "K"if x.Rings<10 else x["Sex"],axis=1)

df1是数据框

  Sex   Length  Diameter Height Whole   Shucked Viscera Shell Rings         
                                weight  weight  weight  weight
0   M   0.455   0.365   0.095   0.5140  0.2245  0.1010  0.1500  15
1   K   0.350   0.265   0.090   0.2255  0.0995  0.0485  0.0700  7
2   K   0.530   0.420   0.135   0.6770  0.2565  0.1415  0.2100  9
3   M   0.440   0.365   0.125   0.5160  0.2155  0.1140  0.1550  10
4   K   0.330   0.255   0.080   0.2050  0.0895  0.0395  0.0550  7
5   K   0.425   0.300   0.095   0.3515  0.1410  0.0775  0.1200  8
6   F   0.530   0.415   0.150   0.7775  0.2370  0.1415  0.3300  20

答案 1 :(得分:1)

您可以使用Python numpy而不是lambda函数。

使用import numpy as np

导入python numpy

然后您可以使用以下方法替换字符串。

fake_abalone2['Sex'] = np.where(fake_abalone2['Rings']<10, 'K', fake_abalone2['Sex']) 

答案 2 :(得分:0)

主要问题是lambda函数的输出:

.apply(lambda x:"K" if x<10)

对于其他条件,输出不确定,因此可以使用 else ...

.apply(lambda x:"K" if x<10 else None)