DataFrame通过其他列进行过滤

问题描述 投票:1回答:1

我可以通过用另一列的值过滤行来对数据框架列进行函数应用吗?

我的实际代码是

df['description_text_clean'] = df.description_text_clean[df['language']!='en'].apply(translate_to_en)

我试图用非英语的列来过滤语言列,并且我想翻译description_text_clean列。但是最后我得到的是description_text_clean列已经被NaN修改了,我想让它们继续保持原样。

示例DataFrame。

df = pd.DataFrame([['Example text', 'en'], 
                   ['No es ingles', 'es'], 
                   ['I am again english', 'en']], 
                   columns=['description_text_clean', 'language'])

实际结果。

    description_text_clean  language
0   NaN                       en
1   It is not English         es
2   NaN                       en

所需的结果是得到一个数据框,其中包含了所有的文本翻译成英文。翻译成中文 使用google translate api的函数。

    description_text_clean  language
0   Example text              en
1   It is not English         es
2   I am again english        en

有什么建议吗?

python pandas dataframe apply
1个回答
2
投票

我错了,我在评论中漏掉了一个小细节,请用以下方法试试 .loc[],series.maskseries.combine_firstnp.where

df.loc[df['language'].ne('en'),'description_text_clean']  = (
                     df['description_text_clean'].map(fun))

或者:

(df.loc[df['language'].ne('en'),'description_text_clean'].map(translate_to_en)
  .combine_first(df.description_text_clean))

或者:

df['description_text_clean'].mask(df['language'].ne('en')
                                  ,df['description_text_clean'].map(translate_to_en))

Or even np.where:

np.where(df['language'].ne('en'),
        df['description_text_clean'].map(fun),df['description_text_clean'])

用虚拟功能测试。

def fun(x):
    return  1
df['description_text_clean'] =(df.loc[df['language'].ne('en'),'description_text_clean']
                      .map(fun).combine_first(df.description_text_clean))

或:

df['description_text_clean'] = df['description_text_clean'].mask(df['language'].ne('en')
                              ,df['description_text_clean'].map(fun))
print(df)

  description_text_clean language
0           Example text       en
1                      1       es
2     I am again english       en
© www.soinside.com 2019 - 2024. All rights reserved.