我想在一个新变量中存储“UserId”的最后一位数字(这样的UserId是字符串类型)。
我想出了这个,但它是一个很长的df,需要很长时间。关于如何优化/避免循环有什么建议吗?
df['LastDigit'] = np.nan
for i in range(0,len(df['UserId'])):
df.loc[i]['LastDigit'] = df.loc[i]['UserId'].strip()[-1]
另一个选项是使用应用。不像列表理解的那样具有表演性,但是基于你的目标非常灵活。以下是对形状为(44289,31)的随机数据帧的一些尝试
%timeit df['LastDigit'] = df['UserId'].apply(lambda x: str(x)[-1]) #if some variables are not strings
12.4 ms ± 215 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%timeit df['LastDigit'] = df['UserId'].str.strip().str[-1]
31.5 ms ± 688 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
%timeit df['LastDigit'] = [str(x).strip()[-1] for x in df['UserId']]
9.7 ms ± 119 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
使用< code>str.strip并按< code>str[-1]进行索引:
df['LastDigit'] = df['UserId'].str.strip().str[-1]
如果性能很重要且没有缺失值,请使用列表理解:
df['LastDigit'] = [x.strip()[-1] for x in df['UserId']]
你的解决方案太慢了,这是最后一个解决方案:
6)更新空帧(例如,使用loc一次一行)
性能:
np.random.seed(456)
users = ['joe','jan ','ben','rick ','clare','mary','tom']
df = pd.DataFrame({
'UserId': np.random.choice(users, size=1000),
})
In [139]: %%timeit
...: df['LastDigit'] = np.nan
...: for i in range(0,len(df['UserId'])):
...: df.loc[i]['LastDigit'] = df.loc[i]['UserId'].strip()[-1]
...:
__main__:3: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame
See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
57.9 s ± 1.48 s per loop (mean ± std. dev. of 7 runs, 1 loop each)
In [140]: %timeit df['LastDigit'] = df['UserId'].str.strip().str[-1]
1.38 ms ± 150 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [141]: %timeit df['LastDigit'] = [x.strip()[-1] for x in df['UserId']]
343 µs ± 8.31 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
本文向大家介绍Python Regex从字符串中提取最大数值,包括了Python Regex从字符串中提取最大数值的使用技巧和注意事项,需要的朋友参考一下 使用正则表达式从字符串中提取最大数值的最简单方法是- 使用regex模块从字符串中提取所有数字 从这些数字中找到最大值 例如,对于输入字符串- 这个城市有121005人,邻近城市有1587469人,而遥远城市有18775994人。 我们应该得到
问题内容: 我是新手,我有一个字符串,我想从字符串中提取数字。例如: 输出为 我只想获取一个整数,而不是列表。 问题答案: 您可以使用方法按 数字 字符串,
我有两根弦。一个包含“格式”和占位符,另一个包含占位符的实际值。 例如: 字符串一: 字符串二: 字符串一: 字符串二: 我正在尝试为变量赋值第二个字符串中username占位符的值,并为变量赋值第二个字符串中password占位符的值。 我知道方法,但这不是用第二个字符串替换第一个字符串吗?
问题内容: 我想从包含数字和字母的字符串中提取数字: 我想在这里获取号码或任何其他号码。 问题答案:
问题内容: 我将提取字符串中包含的所有数字。哪个更适合pur 例: 结果: 问题答案: 如果只想提取正整数,请尝试以下操作: 我认为这比正则表达式示例更好,原因有三点。首先,你不需要其他模块;其次,它更具可读性,因为你无需解析迷你语言;第三,它更快(因此可能更): 这将无法识别浮点数,负整数或十六进制格式的整数。如果你不能接受这些限制,则可以通过以下亭亭玉立的答案解决问题。
问题内容: 我在JavaScript中有一个字符串,例如“#box2”,我只想从中获得“ 2”。 尝试过: 它仍然在警报中返回#box2,我该如何使其正常工作? 它需要容纳末尾附加的任何长度的数字。 问题答案: 对于此特定示例, 在一般情况下: 由于这个答案由于某种原因而受到欢迎,因此有一个好处:正则表达式生成器。