关于python:使用Pandas向字符串列中的每个值添加字符串前缀

您所在的位置:网站首页 每个单元格前面加同一个字符 关于python:使用Pandas向字符串列中的每个值添加字符串前缀

关于python:使用Pandas向字符串列中的每个值添加字符串前缀

2024-07-12 14:34:57| 来源: 网络整理| 查看: 265

我想在熊猫数据帧的所述列中的每个值的开头附加一个字符串(优雅)。 我已经弄清楚该如何做,目前正在使用:

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

这似乎是一件微不足道的事情-您是否知道其他方法(也可能将字符添加到该列为0或NaN的行中)?

如果还不清楚,我想转一下:

123    col 1     a 2     0

变成:

123       col 1     stra 2     str0

相关讨论 你到底在问什么 请就您的代码做什么/希望它做一个解释 我认为示例代码对普通的熊猫用户来说非常清楚。 为了方便起见,我添加了用例示例。 您的描述与您的代码有些矛盾。 != False业务如何? 您要将str添加到每个值还是仅添加一些值? 如我的示例数据框所示。 您的示例仍然不清楚,您是否想要类似df[col] = str + df[col].astype(str)的东西? 大! 那正是我想要的。 您可以将其写下来作为答案。

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

例:

12345678910>>> 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 相关讨论 谢谢。如果有兴趣,数据帧索引也支持这种字符串操作。 如果必须在连接之前满足条件,该怎么办? @ tagoma,4年后,是的:它也支持数据框索引。您可以创建一个新列并将其附加到索引值上,如下所示:df [col] = str + df.index.astype(str) 如果最后尝试保存到文件,则" astype(str)"可能会破坏编码。 当我尝试此方法以及其他任何方法时,都会看到SettingWithCopyWarning。有办法避免吗?

作为替代方案,您还可以将apply与format组合使用(或者更好地使用f字符串),如果例如还想添加一个后缀或操纵元素本身:

123df = pd.DataFrame({'col':['a', 0]}) df['col'] = df['col'].apply(lambda x:"{}{}".format('str', x))

这也会产生所需的输出:

123    col 0  stra 1  str0

如果您使用的是Python 3.6+,则还可以使用f字符串:

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

产生相同的输出。

f字符串版本几乎与@RomanPekar的解决方案(python 3.6.4)一样快:

1234567df = 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确实要慢得多:

12%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) 相关讨论 同样的结果,但是速度更慢;-) @Philipp_Kats:我添加了一些时间,感谢您的建议!看来f弦几乎一样快。 format确实表现较差。您如何比较? 不错哦!在我的理解中,.apply总是比"直接"矢量化操作快或慢。即使它们并不慢,我还是希望尽可能避免它们。 @Philipp_Kats:但是,我同意,在这种特殊情况下,当我还添加一个后缀,使用x本身做某事等时,我觉得它更具可读性,但这仅是一个口味问题... :)

您可以使用pandas.Series.map:

1df['col'].map('str{}'.format)

它将在所有值之前加上" str"一词。

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

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

这种方法允许df的前缀,附加和子集字符串。 适用于Pandas v0.23.4,v0.24.1。不了解较早的版本。

.loc的另一种解决方案:

12df = pd.DataFrame({'col': ['a', 0]}) df.loc[df.index, 'col'] = 'string' + df['col'].astype(str)

这没有上述解决方案快(每个循环慢> 1ms),但是在需要条件更改时可能有用,例如:

12mask = (df['col'] == 0) df.loc[mask, 'col'] = 'string' + df['col'].astype(str)

相关讨论 为什么在df[mask].index中使用.index? @AMC,因为对于.loc,您需要数据帧的索引。这意味着-df [mask]返回符合条件的数据帧,而df [mask] .index返回该数据帧的索引。但是,确实可以使用df.loc [(df [col] == a),col]或df.loc [mask,col]进行相同操作。 因为对于.loc,您需要数据帧的索引。如果df.loc[mask]有效且确实有效,则.index是多余的,对吗? @AMC完全是:)。香港专业教育学院编辑解决方案。谢谢。



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭