pandas的DataFrame转存MATLAB的mat格式

有的时候需要把 pandas 处理好的 DataFrame 进一步交给MATLAB来处理。当然可以保存成 excel 文件,不过当数据量比较大的时候,读取比较慢,这个时候转存成 MATLAB 可读的 mat 文件更合适(MATLAB 能快速读取)。

标准的操作就是 sio.savemat('filename.mat', {name: col.values for name, col in df.items()})

但需要注意两个问题。

DataFrame 里面不要有中文

>>> import pandas as pd
>>> from scipy import io as sio
>>> df = pd.DataFrame({'姓名': ['Mike', 'Jelly'], '年龄': [12, 13]})
>>> df
Out[5]: 
      姓名  年龄
0   Mike  12
1  Jelly  13
>>> sio.savemat('tmp.mat', {name: col.values for name, col in data_.items()})
Traceback ...
...
UnicodeEncodeError: 'latin-1' codec can't encode characters in position 0-1: ordinal not in range(256)

如果出现中文会出现编码问题。建议改成英文。

Dataframe 中日期变量的存储

日期是不能直接存到 mat 文件中的,必须先转换成字符串再存。转字符串有两种方式。

  1. df['time'] = df['time'].astype('str') 。这是比较推荐的方式,按照上述代码转存 mat 文件不会有任何问题。

  2. df['time'] = df['time'].astype('string')。不推荐这种方式,此时 data['time'].values 就不是 ndarray 类型了,而变成了 StringArray 类型,这个是 pandas 特有的类型,转存到 mat 会无法识别,变成一堆浮点数。用这种方式转存时,这一列不能用 col.values,而应该用 col.to_list() 转换成列表储存。

你可能感兴趣的:(#,pandas,&,numpy,&,matplotlib,pandas,matlab)