gpt4 book ai didi

python-3.x - 如何使用 Pandas 从字符串中提取算术运算

转载 作者:行者123 更新时间:2023-12-03 21:53:33 24 4
gpt4 key购买 nike

在 Pandas 数据帧中

>> df.head()

A B C
0 1 â#0.00 + "s=?0.07 + 'due0.93 rt@-[ 3.01
1 2 â#0.02 + "s=?0.16 + 'due0.82 rt@-[ 2.97
...

我只想提取数值。栏目 C我可以做,例如,
>> extr = df['C'].str.extract(r'(\d+\.\d+)', expand=False)
>> df['C'] = pd.to_numeric(extr)
>> df.head()

A B C
0 1 â#0.00 + "s=?0.07 + 'due0.93 3.01
1 2 â#0.02 + "s=?0.16 + 'due0.82 2.97
...

但我对 B 有问题柱子。我如何提取 +操作,以及 float ?我试过
>> extr = df['B'].str.extract(r'(\d+\.\d+)\+(\d+\.\d+)\+(\d+\.\d+)', expand=False)

我希望能给我一些类似的东西
                    0
0 '0.00+0.07+0.93'
1 '0.02+0.16+0.82'
...

但它给了我三列 NaN其中的值(value)观:
       0      1      2
0 NaN NaN NaN
1 NaN NaN NaN
...

那么我怎样才能提取整个算术运算呢?

(只需要 + 操作,其他任何字符,例如 - 都可以忽略。)

最佳答案

使用 Series.str.findall 的替代方法:

df['B'] = df['B'].str.findall(r'(\d+(?:.\d+)?)').agg('+'.join)
# print(df)
A B C
0 1 0.00+0.07+0.93 3.01
1 2 0.02+0.16+0.82 2.97
timeit所有解决方案的比较:
df.shape
(20000, 4)

%%timeit -n100 @Shubham solution
df['B'].str.findall(r'(\d+(?:.\d+)?)').agg('+'.join)
31.9 ms ± 1.51 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)


%%timeit -n100 @Rakesh solution
df["B"].str.findall(r"(\d+\.\d+)").str.join("+")
32.7 ms ± 1.71 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)


%%timeit -n100 @Sammy solution
["+".join(re.findall("(\d+\.?\d+)",entry)) for entry in df.B]
36.8 ms ± 431 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)


%%timeit -n100 @JudV solution
df['B'].str.replace(r'[^\d.+]', '')
59.7 ms ± 5.81 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)

关于python-3.x - 如何使用 Pandas 从字符串中提取算术运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62320918/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com