Python读取.dat转CSV后数据全在一列,如何拆分列?
问题描述
我知道这可能是个非常基础且重复的问题,但我在读取.dat文件时遇到了瓶颈。我有一个.dat文件,尝试将其当作CSV读取,该文件内容开头部分如下(其余行与第18行类似):
#Occultation start (UTC): 2020-02-23 00:04:22 #Occultation stop (UTC): 2020-02-23 00:06:40 #Occultation point latitude (degN): 28.0 #Occultation point longitude (degE): -17.1 #Center of curvature (m): 11574.705 -3554.708 -13613.902 #Radius of curvature (m): 6369130.294 #Azimuth (degN): 129.789 #Undulation (m): 44.336 #Elevation (m): 0.000 #Processing method: Wave optics (CT2) #Background data: ECMWF forecast #Receiver data type: L1caL2p #Navbit correction: extern #Occultation type: Rising #OL/CL mode: OL->CL #Alt OL/CL (m): 11884 #alt w.r.t. EGM96 geoid|lat|lon|azimuth|ba_opt|impact_opt|refrac|dry_press|dry_temp|geopotential height|ba_raw|ba_L1|ba_L2|ba_model|snr_L1|snr_L2 0.000 -99999000.000 -99999000.000 -99999000.000 -0.99999E+08 -99999000.000 -0.99999E+08 -99999000.000 -99999000.000 -99999000.000 -0.99999E+08 -0.99999E+08 -0.99999E+08 -0.99999E+08 -99999000.000 -99999000.000
我尝试通过以下代码移除前17行表头并保存为新文件:
newfile=[] for line in file[17:]: newfile.append(line.strip()) with open('newfile.csv','w') as line: for element in newfile: line.write(element+ "\n")
随后使用pandas读取该CSV文件:
import pandas as pd df = pd.read_csv('newfile.csv',sep=',') print(df.head())
结果所有数据被合并到1列共600行,我尝试了冒号、分号等多种分隔符均无效,请问如何拆分列?
解决方案
你的数据是多个连续空格分隔的,不是逗号或其他符号,以下两种方法可解决:
方法1:直接读取原.dat文件(推荐)
无需转存为csv,直接用pandas处理原文件,跳过注释行并正确解析分隔符:
import pandas as pd # 读取原.dat文件,提取表头 with open('你的文件路径.dat', 'r') as f: # 获取第17行(索引16)的表头,按|拆分并去除空格 header_cols = [col.strip() for col in f.readlines()[16].split('|')] # 读取数据,跳过前17行注释,用任意数量空格作为分隔符 df = pd.read_csv( '你的文件路径.dat', skiprows=17, sep=r'\s+', # 正则匹配任意数量空白字符 names=header_cols ) print(df.head())
方法2:读取你生成的newfile.csv
如果保留已生成的newfile.csv,读取时指定空格分隔即可:
import pandas as pd df = pd.read_csv('newfile.csv', sep=r'\s+') print(df.head())
关键说明
sep=r'\s+'是正则表达式,能匹配任意数量的空格、制表符等空白字符,完美适配你的数据格式。- 表头行用
|分隔,所以需要单独提取并拆分,确保DataFrame的列名正确对应。
内容的提问来源于stack exchange,提问作者bah
相关产品推荐
相关产品推荐

