【问题标题】:pandas dataframe apply lambda if else erro如果其他错误,熊猫数据框应用 lambda
【发布时间】:2018-02-16 03:45:50
【问题描述】:

我正在尝试在 pandas df 上应用带有 if-else 条件的 lambda df 如下所示:

col1 col2 col3 col4 <---column names
None None None col4 <---column values in str
col1 None None None
None col2 None None



df_twitter_archive_master[['col1','col2','col3','col4']].apply(lambda x: x=0 if x=='None' else x=1)

基本上,它应该用 0 替换 'None' 值,否则用 1 但我不断收到此错误

df_twitter_archive_master[['col1','col2','col3','col4']].apply(lambda x: x=0 if x=='None' else x=1)

SyntaxError: invalid syntax

^ 在 x=1 之下

我做错了什么? ?

【问题讨论】:

  • 你能发布一个带有预期输出的示例数据框吗?
  • 好的,刚刚更新
  • 虽然其余的答案都会为您提供结果,但您的问题来自语法 x=0x=1。在您的 lambda 中,您不应该分配值。只需lambda x: 0 if x == 'None' else 1 就足够了。

标签: python pandas lambda


【解决方案1】:

IIUC

df.replace('None',np.nan).notnull().astype(int)
Out[31]: 
   col1  col2  col3  col4
0     0     0     0     1
1     1     0     0     0
2     0     1     0     0

基于您的 lambda 方法

df.applymap(lambda x: 0 if x=='None' else 1)
Out[33]: 
   col1  col2  col3  col4
0     0     0     0     1
1     1     0     0     0
2     0     1     0     0

【讨论】:

  • .apply 和 .applymap 有什么区别??
  • 我明白了,我刚刚用 'else 1' 测试它可以工作,但是当我删除 else 1 时,它出现了相同的语法错误?
  • @ikel DataFrame.apply 将每一列(默认,axis=0)或行(axis=1)传递给提供的函数。 applymap 对行和列中的各个元素进行操作。 Series.apply 对系列的元素进行操作。 Series.mapSeries.apply 在一般情况下略有不同,但在传递可调用函数时效果相同。
【解决方案2】:

让我们试试吧:

(df != 'None').astype(int)

输出:

   col1  col2  col3  col4
0     0     0     0     1
1     1     0     0     0
2     0     1     0     0

【讨论】:

    猜你喜欢
    • 2017-09-09
    • 1970-01-01
    • 1970-01-01
    • 2019-06-16
    • 2019-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多