Ale*_*lex 2 python dataframe pandas
熊猫新手,请耐心等待。
我有一个文本处理函数,我想在我的 datafame 中的一列上运行,条件是另一列中的值。我见过
根据是否标记某些内容,我想对其运行翻译功能。
account article ... translation flag
0 123 text ... 1
1 123 text ... 0
2 123 text ... 1
Run Code Online (Sandbox Code Playgroud)
我试过:
df['translation'] = df[['flag', 'text']].apply(lambda x: translate(['article']) if ['flag'] == 1 else None)
并得到这个回报:
ValueError: ('The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().', 'occurred at index flag')
Run Code Online (Sandbox Code Playgroud)
任何帮助或指导将不胜感激。
我使用了一个类似于你的测试 DataFrame,没有翻译栏:
account article flag
0 123 text1 1
1 123 text2 0
2 123 text3 1
Run Code Online (Sandbox Code Playgroud)
然后我定义了一个“代理”翻译函数:
def translate(txt):
return '_' + txt + '_'
Run Code Online (Sandbox Code Playgroud)
并有条件地调用它,运行:
df['translation'] = df.apply(lambda row:
translate(row.article) if row.flag == 1 else None, axis=1)
Run Code Online (Sandbox Code Playgroud)
结果是:
account article flag translation
0 123 text1 1 _text1_
1 123 text2 0 None
2 123 text3 1 _text3_
Run Code Online (Sandbox Code Playgroud)
你的代码有什么问题:
如果要将源数据限制为列的子集,请使用现有 列名(article而不是text)并包括应用函数中使用的所有列。
lambda 函数应用于每一行,因此您应该传递 axis=1参数(默认轴为0)。
当您的函数被调用时,当前行作为参数 ( x )传递,但要引用其中的某些列,您应该使用x.column_name 表示法。例如,我的解决方案也可以是:
df[['article', 'flag']].apply(lambda row:
translate(row.article) if row.flag == 1 else None, axis=1)
Run Code Online (Sandbox Code Playgroud)
像['article']这样的参数在这里只是一个列表,包含一个词(article)。我怀疑您的翻译功能是否能够处理列表参数。
关于if ['flag'] ... 的类似评论。这不是对源行中的列的引用。
| 归档时间: |
|
| 查看次数: |
4354 次 |
| 最近记录: |