python - 如果 '-' 在字符串中间,则将数据帧单元格中的 'E-' 替换为 '-'

标签 python regex pandas replace

我有一个由 7 列组成的巨大数据框。 摘录:

45589   664865.0    100000.0    7.62275    -.494     1.60149      100010
...
57205   718888.0    100000.0    8.218463    -1.405-3     1.75137      100010
...
55143   711827.0    100000.0    8.156107    9.8336-3    1.758051      100010

由于这些值来自输入文件,因此目前所有的都是字符串类型,我想将所有数据帧更改为 float :

df= df.astype('float')

但是,正如您可能已经在摘录中注意到的那样,隐藏了“-”。有的表示整数的负值,如-.494,有的表示负的幂,如9.8-3。

我需要将后者替换为“E-”,以便 Python 理解它是一种力量,并且可以将单元格切换为浮点类型。通常,我会使用:

df= df.replace('E\-', '-', regex=True)

但是,这也会为我的负值添加一个 E。为避免这种情况,我尝试了此处提供的解决方案:Replace all a in the middle of string by * using regex

str = 'JAYANTA POKED AGASTYA WITH BAAAAMBOO '
str = re.sub(r'\BA+\B', r'*', str)

但是,这是针对一个特定字符串的。由于我的数据框非常大,我想避免遍历每个单元格。

是否可以使用 replacere.sub 函数的组合,以便仅用“E-”替换其他字符串包围的“-” ?

感谢您的帮助!

最佳答案

可以使用regex negative lookahead 和positive lookahead 断言连字符在中间进行替换,如下:

df = df.replace(r'\s', '', regex=True)      # remove any unwanted spaces 
df = df.replace(r'(?<=.)-(?=.)', 'E-', regex=True)

结果:

print(df)

        0         1         2         3          4         5       6
0  45589  664865.0  100000.0   7.62275      -.494   1.60149  100010
1  57205  718888.0  100000.0  8.218463  -1.405E-3   1.75137  100010
2  55143  711827.0  100000.0  8.156107  9.8336E-3  1.758051  100010

关于python - 如果 '-' 在字符串中间,则将数据帧单元格中的 'E-' 替换为 '-',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68163639/

相关文章:

Python:从标题等于键的字典中重复写入csv文件

python - 使用 Pandas 读取带有额外逗号且没有 quotechar 的 CSV?

python - 在 Django 中同时使用 python-social-auth 和电子邮件注册来复制电子邮件

python - Numpy复杂的数据结构

python - 如何用python获取电池百分比?

python - 基于多列的唯一值

python - 突出显示 Excel 列中大于某个值的总和

java - 从输入字符串中的数组中搜索关键字并打印它们

python - 建议正则表达式中的子字符串应根据长度排序的建议背后的原因是什么?

python - 如何仅打印具有五个或更多正则表达式匹配项的行?