Python熊猫to_csv导致OSError:[Errno 22]无效的参数

时间:2019-02-21 16:28:10

标签: python pandas csv

我的代码如下:

import pandas as pd
import numpy as np

df = pd.read_csv("path/to/my/infile.csv")
df = df.sort_values(['distance', 'time'])
df.to_csv("path/to/my/outfile.csv")

此代码成功读取了一个3GB的csv文件infile.csv,对其进行了排序,并在尝试写入outfile.csv时失败,并出现以下错误:

OSError                                   Traceback (most recent call last)
<ipython-input-10-3a5c8279658d> in <module>
----> 1 df.to_csv('/Users/joaomatos/Desktop/cluster22_sorted_training.csv',index=False)

/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pandas/core/frame.py in to_csv(self, path_or_buf, sep, na_rep, float_format, columns, header, index, index_label, mode, encoding, compression, quoting, quotechar, line_terminator, chunksize, tupleize_cols, date_format, doublequote, escapechar, decimal)
   1743                                  doublequote=doublequote,
   1744                                  escapechar=escapechar, decimal=decimal)
-> 1745         formatter.save()
   1746 
   1747         if path_or_buf is None:

/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pandas/io/formats/csvs.py in save(self)
    164                                          encoding=encoding,
    165                                          compression=self.compression)
--> 166                 f.write(buf)
    167                 f.close()
    168                 for _fh in handles:

OSError: [Errno 22] Invalid argument

我的问题是为什么?

谢谢您的帮助

4 个答案:

答案 0 :(得分:1)

就我而言,一旦我指定了绝对路径而不是相对路径,它就起作用了。我不知道为什么 - 它以前没有发生过。也许是因为我正在使用外部硬盘驱动器?

答案 1 :(得分:1)

探索了很多选项,包括pandas库更新到最新版本(今天是1.2.4),把引擎改成“python”或“c”,调试等,终于发现问题所在是:

我将 CSV 文件存储在一个文件夹中,该文件夹不断与 OneDrive 实时同步

是的!我发现托盘图标变得疯狂并且 OneDrive 正在消耗资源,同时我正在对我的宠物项目进行算法交易回测。 我暂停了同步,然后它再也没有失败过!!

我想您也可以从 OneDrive 中排除该文件夹,或者只是更改 CSV 的存储/写入/访问位置。

答案 2 :(得分:0)

显然,此问题是由报告的here与先前版本的熊猫相关联的已知错误引起的。我要做的就是pip3 install --upgrade pandas,然后重新启动计算机。

答案 3 :(得分:0)

我只是有一个类似的问题,我使用反斜杠“ \”,该斜杠通常在过去有效,但是这次我不得不使用“ /”代替,这非常奇怪,但它确实有效。也许您可以尝试一下?