使用pandas read_table读取含无空格负数的空格分隔表格问题
解决pandas读取空格分隔但负数无间隔数据的问题
嘿,这个坑我之前踩过!你的问题核心在于数据里的负数和前一个数值连在一起了(比如0.00000E+00-7.52896E-04),read_table默认按空格分割,自然没法识别这是两个独立的数值。给你两个实用的解决方案:
方法一:正则预处理文本(通用场景)
先把文件内容读出来,用正则表达式在合法的负数符号前插入空格,再交给pandas读取:
import pandas as pd import re from io import StringIO # 读取原始文件内容 with open("your_data_file.txt", "r") as f: raw_content = f.read() # 正则替换:在数字、E/e、+后面的"-"前加空格 processed_content = re.sub(r"([0-9Ee\+])-", r"\1 -", raw_content) # 用处理后的内容生成DataFrame df = pd.read_table(StringIO(processed_content), sep="\s+")
这个正则逻辑很明确:只匹配那些紧跟在数字、科学计数法标识(E/e)或者正号后面的负号,给它前面补个空格,这样就把连在一起的数值彻底分开了,完全不影响其他正常符号。
方法二:固定宽度读取(列宽固定时更高效)
如果你的数据每一列的字符宽度是固定的(看你的示例,科学计数法的格式很规整,大概率符合),直接用read_fwf(fixed-width format)会更省心:
import pandas as pd # 假设每列宽度为12(根据你的实际数据调整列数和宽度) df = pd.read_fwf("your_data_file.txt", widths=[12]*13)
你可以数一下示例里每个数值的字符数,调整widths里的参数,这种方法不需要文本预处理,速度更快。
最后记得检查一下生成的DataFrame,看看数值类型是否正确(应该都是float64),有没有分割错误的情况~
内容的提问来源于stack exchange,提问作者Kam
相关产品推荐
相关产品推荐

