2024-05-15 06:30:48 发布
网友
我想在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
作为替代方案,您还可以使用apply与format结合使用(或更好地与f字符串结合使用),如果您还想添加后缀或操作元素本身,我会发现它的可读性稍高一些:
apply
format
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) 然后您可以使用这样的方法:
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
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
作为替代方案,您还可以使用
apply
与format
结合使用(或更好地与f字符串结合使用),如果您还想添加后缀或操作元素本身,我会发现它的可读性稍高一些:这也会产生所需的输出:
如果使用的是Python3.6+,还可以使用f字符串:
产生相同的输出。
f-string版本几乎和@RomanPekar的解决方案(python 3.6.4)一样快:
然而,使用
format
确实要慢得多:如果用
dtype=str
加载表文件 或将列类型转换为字符串
df['a'] = df['a'].astype(str)
然后您可以使用这样的方法:
这种方法允许
df
的prepend、append和subset字符串。在熊猫v0.23.4和v0.24.1上工作。不知道以前的版本。
示例:
相关问题 更多 >
编程相关推荐