我有一个由 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)
但是,这是针对一个特定字符串的。由于我的数据框非常大,我想避免遍历每个单元格。
是否可以使用 replace
和 re.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/