matlab保存csv遇到的问题?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab保存csv遇到的问题?相关的知识,希望对你有一定的参考价值。

使用matlab的csvwrite函数保存csv,将两列数据保存到csv文件中,但是只能把数据保存进去,不能存储表头,我要实现的保存为csv的效果如下图:

如上图,时间和电压这两个数据的说明要写进去,但是我保存的如下图,只有两列数据,没有说明,

因为一些原因,我一定只能保存为csv格式,并且手动添加不现实,我们实验有上百组数据,一个一个手动改费时间,我也试过用cell类型写csv,但是发现csvwrite不支持,请问大家有什么好的办法、

参考技术A xlswrite可以添加表头的
xlswrite(‘1.csv‘,a,'a1:b1);
a='时间’,‘电压’)
参考技术B 那就自己手动添加那一行好了。
1. 用文本文件方式打开上面的那个csv,吧表头内容复制下来;
2. 用matlab的低级文件读写处理下面这个:新建一个csv文件,写入表头,再把下面文件中的内容复制过去。
比较笨。

Pandas to_csv() 缓慢保存大型数据帧

【中文标题】Pandas to_csv() 缓慢保存大型数据帧【英文标题】:Pandas to_csv() slow saving large dataframe 【发布时间】:2017-04-01 07:34:56 【问题描述】:

我猜这是一个简单的解决方法,但我遇到了一个问题,即使用 to_csv() 函数将 pandas 数据帧保存到 csv 文件需要将近一个小时。我将 anaconda python 2.7.12 与 pandas (0.19.1) 一起使用。

import os
import glob
import pandas as pd

src_files = glob.glob(os.path.join('/my/path', "*.csv.gz"))

# 1 - Takes 2 min to read 20m records from 30 files
for file_ in sorted(src_files):
    stage = pd.DataFrame()
    iter_csv = pd.read_csv(file_
                     , sep=','
                     , index_col=False
                     , header=0
                     , low_memory=False
                     , iterator=True
                     , chunksize=100000
                     , compression='gzip'
                     , memory_map=True
                     , encoding='utf-8')

    df = pd.concat([chunk for chunk in iter_csv])
    stage = stage.append(df, ignore_index=True)

# 2 - Takes 55 min to write 20m records from one dataframe
stage.to_csv('output.csv'
             , sep='|'
             , header=True
             , index=False
             , chunksize=100000
             , encoding='utf-8')

del stage

我已确认硬件和内存正常工作,但这些表相当宽(约 100 列),主要包含数字(十进制)数据。

谢谢,

【问题讨论】:

硬件瓶颈。密切关注您的磁盘吞吐量,并检查是否有空的磁盘空间。 正如我所提到的,我确实检查了磁盘空间,并且可以以预期的速度将大文件复制到驱动器。另外,我应该提到我正在写入 SSD(三星 950) 尝试不使用chunksize kwag... 这可能是很多事情,例如报价、价值转换等。尝试profile 看看它大部分时间都花在了哪里。 有什么更新吗?我最近遇到了类似的问题 我在 pci express 上有一个 ssd 并面临同样的问题。在这种情况下,硬件不应该是瓶颈...... 【参考方案1】:

您正在读取压缩文件并写入纯文本文件。 可能是 IO 瓶颈。

写入压缩文件可以将写入速度提高 10 倍

    stage.to_csv('output.csv.gz'
         , sep='|'
         , header=True
         , index=False
         , chunksize=100000
         , compression='gzip'
         , encoding='utf-8')

此外,您可以尝试不同的块大小和压缩方法(“bz2”、“xz”)。

【讨论】:

Frane,解决方案无效。花费的时间仍然保持不变 @ShreeshaN 你有什么时间?执行to_csv 方法还是整个脚本? to_csv 的执行 @ShreeshaN 你在说什么大小和时间?查看 hdf 格式的替代方案。如果您需要文本/csv,请查看 ***.com/a/54617862/6646912 在他的评论中提到的问题。 感谢您提供的替代方案。我试过 hdf 格式,to_hdf() 超级快。保存一个包含 40 万条记录的 600mb 文件需要 4 秒,而 to_csv 即使在使用块和压缩之后也需要 220 秒。谢谢【参考方案2】:

添加我的小见解,因为“gzip”替代方案对我不起作用 - 尝试使用 to_hdf 方法。这大大减少了写入时间! (对于 100MB 的文件,不到一秒 - CSV 选项在 30-55 秒之间执行此操作)

stage.to_hdf(r'path/file.h5', key='stage', mode='w')

【讨论】:

这个解决方案对我有用,而 .gz 解决方案没有任何区别。 .to_hdf 方法在 13 秒内写出 1.5GB。 .to_csv 花费的时间太长,即使 Frane 建议进行更改 是的,.gz 解决方案对 5GB 的文件大小没有影响 我从 .to_csv 的 4 分钟到 .to_hdf 的 8 秒!!!!谢谢@amir-f !!【参考方案3】:

您说“[...] 主要是数字(十进制)数据。”。你有时间和/或日期的列吗?

当它只有数字/字符串值时,我在几秒钟内保存了一个 8 GB 的 CSV,但保存一个包含两个 Dates 列的 500 MB CSV 需要 20 分钟。所以,我建议在保存之前将每个日期列转换为字符串。下面的命令就足够了:

df['Column'] = df['Column'].astype(str) 

希望这个回答对你有帮助。

P.S.:我知道保存为.hdf 文件解决了这个问题。但是,有时我们确实需要一个.csv 文件。

【讨论】:

还可以处理您可能需要的 NaT 值 df['Column'].astype(str).replace('NaT', '')

以上是关于matlab保存csv遇到的问题?的主要内容,如果未能解决你的问题,请参考以下文章

Matlab--cell输出至csv文件cell2csv

Jmeter之csv传参遇到的问题

Matlab保存数据到csv文件的方法分享

数据备份和计划任务中遇到的问题

将数据变量从 matlab 保存到 csv 或文本文件

Matlab用变量名保存.mat文件