pandas的DataFrame转存MATLAB的mat格式

在将PandasDataFrame传递给MATLAB处理时,通常会将其保存为mat文件以提高读取速度。然而,需注意不能包含中文和日期应转换为字符串。中文会导致编码错误,建议使用英文。日期转换为字符串时,推荐使用astype(str),因为它保持ndarray类型,而astype(string)会产生不可识别的StringArray。转换后需用col.values或col.to_list()存储。
摘要由CSDN通过智能技术生成

有的时候需要把 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() 转换成列表储存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值