如何将numpy.ndarray类型的.mat文件转为CSV?代码问题求助
解决.mat转CSV时数据集中在单个单元格的问题
你的问题出在对loadmat返回值的处理上:loadmat加载.mat文件后返回的是字典对象,直接把字典转成numpy数组,得到的是包含键值对的结构,后续转成DataFrame自然会把所有内容压缩到单个单元格里。
修正步骤:
- 先查看加载后字典里的所有键,找到存储实际数据的变量名(系统自动生成的
__header__、__version__、__globals__这几个键可以忽略)。 - 从字典中提取对应的numpy.ndarray数据。
- 将数组直接转换为DataFrame(二维数组可直接转换,一维数组可先转Series再转DataFrame)。
- 保存为CSV文件。
修正后的代码示例:
import pandas as pd import numpy as np from scipy.io import loadmat # 加载.mat文件 data = loadmat(r"EAOW_FLOW_TimeSeries_1hr_LocationA1_final.mat") # 打印所有键,找到存储实际数据的变量名 print(data.keys()) # 替换成你找到的实际数据变量名,比如假设是'EAOW_FLOW_TimeSeries' data_array = data['EAOW_FLOW_TimeSeries'] # 转换为DataFrame # 如果是一维数组,可改用 df = pd.DataFrame(data_array, columns=['流量数据']) 自定义列名 df = pd.DataFrame(data_array) # 保存为CSV df.to_csv(r"data.csv", index=False)
额外说明:
- 如果你的数据是三维数组,需要先调整结构(比如用
data_array.reshape(-1, data_array.shape[-1])降维)再转DataFrame。 - 如果数据包含时间戳信息,可将时间戳列转换为
datetime类型,方便后续分析:df['时间'] = pd.to_datetime(df['时间'])
内容的提问来源于stack exchange,提问作者Aarzoo Syed
相关产品推荐
相关产品推荐

