【问题标题】:Python Pandas - Cannot recognize a string from a column in another dataframe columnPython Pandas - 无法识别来自另一个数据框列中的列的字符串
【发布时间】:2019-10-30 09:01:52
【问题描述】:

我有一个包含以下数据的数据框:

现在我正在尝试使用 isIn 方法,以便在 col_a 在 col_b 中时生成一个带有结果的新列。所以在这种情况下,我试图生成以下输出:

为此,我正在使用此代码:

df['res'] = df.col_a.isin(df.col_b)

但它总是返回 FALSE。我也试试这个:df['res'] = df.col_b.isin(df.col_a) 但结果相同...所有行都为 FALSE。

我做错了什么?

谢谢!

【问题讨论】:

标签: python pandas dataframe text contains


【解决方案1】:

您可以通过apply 检查col_a 中的值是否在每行col_b 中:

df['res'] = df.apply(lambda x: x.col_a in x.col_b, axis=1)

或者通过列表理解:

df['res'] = [a in b for a, b in zip(df.col_a, df.col_b)]

编辑:错误显然意味着有缺失值,所以if-else 声明是必要的:

df = pd.DataFrame({'col_a':['SQL','Java','C#', np.nan, 'Python', np.nan],
                   'col_b':['I.like_SQL_since_i_used_to_ETL',
                            'I like_programming_SQL.too',
                            'I prefer Java',
                            'I like beer',
                             np.nan,
                             np.nan]})
print (df)

df['res'] = df.apply(lambda x: x.col_a in x.col_b 
                               if (x.col_a == x.col_a) and (x.col_b == x.col_b) 
                               else False, axis=1)

df['res1'] = [a in b if (a == a) and (b == b) else False for a, b in zip(df.col_a, df.col_b)]
print (df)
    col_a                           col_b    res   res1
0     SQL  I.like_SQL_since_i_used_to_ETL   True   True
1    Java      I like_programming_SQL.too  False  False
2      C#                   I prefer Java  False  False
3     NaN                     I like beer  False  False
4  Python                             NaN  False  False
5     NaN                             NaN  False  False

【讨论】:

  • 谢谢!我收到以下错误:TypeError: ("'in ' requires string as left operand, not float", 'occured at index 168') 因为我的列上只有字符串
猜你喜欢
  • 1970-01-01
  • 2017-11-06
  • 2017-09-12
  • 2022-10-14
  • 2018-10-18
  • 1970-01-01
  • 2022-07-29
  • 1970-01-01
  • 2021-09-12
相关资源
最近更新 更多