首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字符串连接前如何在正整数前面加上+?

字符串连接前如何在正整数前面加上+?
EN

Stack Overflow用户
提问于 2022-02-17 16:42:22
回答 2查看 53关注 0票数 0

我有这样的代码:

代码语言:javascript
复制
import pandas as pd

zed = pd.DataFrame(data = {'a': [3, -5], 'b': [-4, 7]})
zed['c'] = zed['a'].astype(str) + ' ' + zed['b'].astype(str)

这意味着:

代码语言:javascript
复制
    a   b   c
0   3   -4  3 -4
1   -5  7   -5 7

但我正在寻找列c

代码语言:javascript
复制
    a   b   c
0   3   -4  +3 -4
1   -5  7   -5 +7

也就是说,正数应该有一个+前缀。

当我在任何地方添加if/else条件时,我的代码会变得非常混乱。我创建了以下函数:

代码语言:javascript
复制
def plus_prefix(a):
    if a > 0:
        b = '+' + a.astype(str)
    else:
        b = a.astype(str)
    return b

但是zed['c'] = plus_prefix(zed['a']) + ' ' + plus_prefix(zed['b'])抛出一个错误The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()。这又如何改善呢?如果我能够创建plus_prefix,以便在最后将其链接起来,zed['a'].plus_prefix()就太好了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-17 16:53:36

可以使用apply()方法将函数应用于DataFrame (见文件):

代码语言:javascript
复制
zed['c'] = zed['a'].apply(plus_prefix) + ' ' + zed['b'].apply(plus_prefix)

但是,由于您的值是整数,所以我得到了一个新的错误,因为它不知道astype()。在修改了您的函数之后,我能够让它开始工作:

代码语言:javascript
复制
import pandas as pd

def plus_prefix(a):
    if a > 0:
        b = '+' + str(a)
    else:
        b = str(a)
    return b

zed = pd.DataFrame(data = {'a': [3, -5], 'b': [-4, 7]})
zed['c'] = zed['a'].apply(plus_prefix) + ' ' + zed['b'].apply(plus_prefix)
票数 2
EN

Stack Overflow用户

发布于 2022-02-17 16:54:05

这应该能起作用:

代码语言:javascript
复制
zed['c'] = zed['a'].apply(lambda x: '{:+}'.format(x)) + ' ' + zed['b'].apply(lambda x: '{:+}'.format(x))

Python >= 3.6

正如@Tomerikoo建议的那样,可以使用f-String简化代码:

代码语言:javascript
复制
zed['c'] = zed['a'].apply(lambda x: f'{x:+}') + ' ' + zed['b'].apply(lambda x: f'{x:+}')
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71162121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档