如何将多列大型文本文件转换为DataFrame?附数据样例
解决dxd文件转DataFrame并处理时间特征的方案
没问题,我来帮你搞定这个文件转DataFrame的事儿!你的这个dxd文件不是标准CSV格式,前面带了元数据说明,直接用pd.read_csv会把这些元数据也读进来导致失败,咱们分步骤处理:
1. 读取文件到DataFrame
首先跳过前面的元数据行,指定正确的分隔符(你的数据是用空格分隔的),代码如下:
import pandas as pd # 替换成你的文件路径,注意Windows路径用r前缀避免转义问题 file_path = r"D:\Share\20190418 - Baseline test Nu2\20190418 BaselineTest_0000.dxd" # 读取文件:跳过前7行(元数据+Data1标记行),用正则匹配多个空格作为分隔符 df = pd.read_csv( file_path, skiprows=7, # 跳过前7行无关内容,从表头行开始读取 sep=r'\s+', # 匹配一个或多个空格,适配列间的空格分隔 engine='python' # 避免正则分隔时的引擎警告 ) # 查看前5行确认读取是否正确 print(df.head())
2. 处理时间相关数据
你的文件里的Time (s)是相对开始时间的秒数,结合文件里给出的开始时间,咱们可以生成绝对时间列,方便后续时间统计:
# 解析文件里的开始时间,注意格式是日/月/年 时分秒.毫秒 start_time = pd.to_datetime("18/04/2019 08:58:48.000", format="%d/%m/%Y %H:%M:%S.%f") # 计算绝对时间:开始时间 + 相对秒数 df['Absolute_Time'] = start_time + pd.to_timedelta(df['Time (s)'], unit='s') # 把绝对时间设为索引,方便后续时间序列分析 df.set_index('Absolute_Time', inplace=True) # 查看处理后的时间列 print(df[['Time (s)']].head())
3. 提取时间统计特征示例
既然是时间相关数据,你可以用滚动窗口、时间聚合等方式提取特征,比如计算100毫秒窗口内的油温均值(采样率100000,100毫秒对应10000个样本):
# 创建10000个样本的滚动窗口 rolling_window = df.rolling(window=10000) # 计算窗口内的进油/出油温度均值 temp_rolling_mean = rolling_window[['Temp_Oil in (°C)', 'Temp_Oil out (°C)']].mean() # 查看结果 print(temp_rolling_mean.dropna().head())
可能的小调整
- 如果读取时发现跳过的行数不对,可以调整
skiprows的值(比如实际文件里元数据行数不同) - 如果遇到编码问题,可在
pd.read_csv里添加encoding='utf-8'或encoding='gbk'参数
内容的提问来源于stack exchange,提问作者Aayush Jain
相关产品推荐
相关产品推荐

