使用Pandas为字符串列中的每个值添加字符串前缀

2024-05-15 06:30:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在pandas数据框的上述列中的每个值的开头附加一个字符串(优雅地)。 我已经知道如何做到这一点,我目前正在使用:

df.ix[(df['col'] != False), 'col'] = 'str'+df[(df['col'] != False), 'col']

这似乎是一件很不体面的事情-你知道其他的方法吗(这可能也会将字符添加到列为0或NaN的行中)?

如果这还不清楚,我想:

    col 
1     a
2     0

进入:

       col 
1     stra
2     str0

Tags: 数据方法字符串falsepandasdfcolnan
3条回答

作为替代方案,您还可以使用applyformat结合使用(或更好地与f字符串结合使用),如果您还想添加后缀或操作元素本身,我会发现它的可读性稍高一些:

df = pd.DataFrame({'col':['a', 0]})

df['col'] = df['col'].apply(lambda x: "{}{}".format('str', x))

这也会产生所需的输出:

    col
0  stra
1  str0

如果使用的是Python3.6+,还可以使用f字符串:

df['col'] = df['col'].apply(lambda x: f"str{x}")

产生相同的输出。

f-string版本几乎和@RomanPekar的解决方案(python 3.6.4)一样快:

df = pd.DataFrame({'col':['a', 0]*200000})

%timeit df['col'].apply(lambda x: f"str{x}")
117 ms ± 451 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

%timeit 'str' + df['col'].astype(str)
112 ms ± 1.04 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

然而,使用format确实要慢得多:

%timeit df['col'].apply(lambda x: "{}{}".format('str', x))
185 ms ± 1.07 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

如果用dtype=str
加载表文件 或将列类型转换为字符串df['a'] = df['a'].astype(str)
然后您可以使用这样的方法:

df['a']= 'col' + df['a'].str[:]

这种方法允许df的prepend、append和subset字符串。
在熊猫v0.23.4和v0.24.1上工作。不知道以前的版本。

df['col'] = 'str' + df['col'].astype(str)

示例:

>>> df = pd.DataFrame({'col':['a',0]})
>>> df
  col
0   a
1   0
>>> df['col'] = 'str' + df['col'].astype(str)
>>> df
    col
0  stra
1  str0

相关问题 更多 >

    热门问题