【问题标题】:Conditional If Statement: If value contains string then set another column equal to string条件 If 语句:如果值包含字符串,则设置另一列等于字符串
【发布时间】:2018-11-25 06:10:50
【问题描述】:

我写了一个 python 3 脚本


我有一个列“original_title”,其中我有不同的电影片名 i.a. 《星球大战》(+剧集名称)和《星际迷航》(+剧集名称)的所有电影。我想创建一个仅显示“星际迷航”(没有剧集名称)、“星球大战”和“na”的专栏。

这是我的新专栏代码:

df['Trek_Wars'] = pd.np.where(df.original_title.str.contains("Star Wars"), "star_wars", 
              pd.np.where(df.original_title.str.contains("Star Trek"), "star_trek"))

但是,它不起作用

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-33-5472b36a2193> in <module>()
      1 df['Trek_Wars'] = pd.np.where(df.original_title.str.contains("Star Wars"), "star_wars",
----> 2                    pd.np.where(df.original_title.str.contains("Star Trek"), "star_trek"))

ValueError: either both or neither of x and y should be given

我该怎么办?

【问题讨论】:

  • 你用什么语言写的?请标记它

标签: python string pandas if-statement dataframe


【解决方案1】:

在您的示例中,“星球大战”和“星际迷航”这两个值都包含相同数量的字符 (9),您可以将字符串拆分为前 9 个字母。 但要更精细地解析该列,您需要找到更好的方法。

X['Film_Series'] = 0
for ind, row in df.iterrows():
    X['Film_Series'].loc[ind] = X['film_name'].loc[ind].str[:9]

【讨论】:

    【解决方案2】:

    我假设您正在使用 Pandas。我不知道pd.np.where 方法,但有np.where,您可以将其用于您的任务:

    df['Trek_Wars'] = np.where(df['original_title'].str.contains('Star Wars'),
                               'star_wars', 'na')
    

    请注意,我们必须提供满足条件和不满足条件的值。多个条件可以使用pd.DataFrame.loc

    # set default value
    df['Trek_Wars'] = 'na'
    
    # update according to conditions
    df.loc[df['original_title'].str.contains('Star Wars'), 'Trek_Wars'] = 'star_wars'
    df.loc[df['original_title'].str.contains('Star Trek'), 'Trek_Wars'] = 'star_trek'
    

    您可以使用字典映射进一步简化您的逻辑:

    # map search string to update string
    mapping = {'Star Wars': 'star_wars', 'Star Trek': 'star_trek'}
    
    # iterate mapping items
    for k, v in mapping.items():
        df.loc[df['original_title'].str.contains(k), 'Trek_Wars'] = v
    

    【讨论】:

    • 我也不知道pd.np.where,在 iPython 中尝试过,发现它确实有效,我很震惊。我现在正在查看源代码,因为我不明白它的用途;谷歌搜索并不容易:)
    猜你喜欢
    • 2017-10-09
    • 2015-08-19
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    相关资源
    最近更新 更多