【问题标题】:Python pandas to_csv causes OSError: [Errno 22] Invalid argumentPython pandas to_csv 导致 OSError: [Errno 22] Invalid argument
【发布时间】:2021-10-10 19:32:16
【问题描述】:

我的代码如下:

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

我的问题是为什么?

感谢您的帮助

【问题讨论】:

  • 我认为缺少一个“by”:df.sort_values(by=['distance', 'time'])
  • 排序工作正常
  • 你试过只写几行吗? df.head().to_csv("path/to/my/outfile.csv")
  • 是的,它有效,这表明它可能与文件大小有关
  • 也许 chunksize 会帮助你:df.head().to_csv("path/to/my/outfile.csv", chunksize=10000)

标签: python pandas csv


【解决方案1】:

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

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

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

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

【讨论】:

  • 我遇到了同样的问题,随机弹出,我的代码大部分时间都在运行,并且每隔一段时间就会抛出这个错误。您对同步问题的解释对我来说很有意义,是否有代码来检查文件是否正在使用,等到它完成同步然后开始编写代码?除了停止同步之外的任何其他解决方案。
【解决方案2】:

我刚刚遇到了类似的问题,我使用了过去通常可以使用的反斜杠“\”,但这次我不得不使用“/”来代替,这非常奇怪,但它确实有效。或许你可以试试?

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      在我的情况下,一旦我指定了绝对路径而不是相对路径,它就会起作用。我不知道为什么——以前没有发生过。可能是因为我正在使用外部硬盘驱动器?

      【讨论】:

        【解决方案5】:

        你应该使用“/”而不是使用“”。

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-07-29
        • 1970-01-01
        • 1970-01-01
        • 2020-04-07
        • 2019-06-29
        • 2018-06-15
        • 2021-08-26
        • 2018-12-02
        相关资源
        最近更新 更多