python - DataFrame 按其他列应用过滤
问题描述
我可以通过过滤具有另一个列值的行来将函数应用于数据框列吗?
我的实际代码是:
df['description_text_clean'] = df.description_text_clean[df['language']!='en'].apply(translate_to_en)
我试图通过非英语的语言来过滤语言列,并且我想翻译 description_text_clean 列。但最后我发现 description_text_clean 列已被 NaN 在英文列中修改,我希望它们继续原样。
示例数据框:
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 的translate_to_en函数获得一个将所有文本翻译成英文的数据框:
description_text_clean language
0 Example text en
1 It is not English es
2 I am again english en
有什么建议吗?
解决方案
糟糕的是,我在评论中遗漏了一个小细节,请尝试使用.loc[]
,series.mask
或series.combine_first
np.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))
甚至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
推荐阅读
- excel - Excel - 过滤多列
- php - 在 PHP 中生成带有重复标题行的表
- android - Android Studio Flutter 无法编译到 iOS
- datastax - DseGraphFrames 问题
- big-o - 确定这些嵌套循环的时间复杂度
- css - Angular 5 材料 flex-layout fxLayoutAlign="space-evenly center" 不起作用
- html - 尝试区分“[object Object]”时出错。只允许使用数组和可迭代对象。(离子 3)
- tensorflow - 将预训练的保存模型从 NCHW 转换为 NHWC,使其与 Tensorflow Lite 兼容
- c# - Android,Xamarin:捕获随机异常:
- caching - Hazelcast 有分布式优先级队列实现吗?