【问题标题】:Reading a CSV file to pandas works in windows, not in ubuntu将 CSV 文件读取到 pandas 可以在 Windows 中工作,而不是在 ubuntu 中
【发布时间】:2021-01-02 08:15:23
【问题描述】:

我在 python 中使用 windows 编写了一些脚本,并希望在我的树莓派中使用 Ubuntu 运行它。

我正在读取带有换行符换行符的 csv 文件。当我加载 df 时,我使用以下代码:

dfaux = pd.read_csv(r'/home/ubuntu/Downloads/data.csv', sep=';')

只加载一行的df。我还尝试包含引发此错误消息的参数lineterminator = '\n\t'

ValueError:仅支持长度为 1 的行终止符

在 Windows 中,我看到 csv 文件中的换行符,而当我在 ubuntu 中使用鼠标垫打开它时,我看不到换行符,但我看到了颜色编码的列。

如何正确读取 csv?

谢谢!

【问题讨论】:

  • 这可能是行分隔符的问题吗?你能 trz 将 csv 转换为 unix 风格的行尾吗?例如,您可以使用 dos2unix。
  • 我在终端使用 dos2unix 进行了转换,结果相同

标签: python pandas dataframe csv raspberry-pi4


【解决方案1】:

这几乎肯定是 Windows 和其他所有内容之间行尾差异的问题。 Windows 使用两个字符的行终止符,“\r\n”(回车,后跟换行符),而 Linux 和 Mac 以及其他一切都只使用“\n”。

两个简单的修复:

  1. 使用read_csv(..., engine='python') 应该可以解决这个问题。您可能还需要指定read_csv(..., lineterminator='\r\n'),但根据您收到的错误消息,它看起来无论如何都会自动检测到。 (Function docs)

  2. 在将文件发送给 Pandas 之前修复文件。比如:

     import io
     csv_data = open(r'/home/ubuntu/Downloads/data.csv').read().replace('\r\n', '\n')
     dfaux = pd.read_csv(io.StringIO(csv_data))
    

【讨论】:

  • 感谢 cmets。修复 1 没有改变结果,而修复 2 抛出 OSError: [Errno 36] File name too long: ... 似乎它正在尝试使用文件本身中的所有数据重命名文件
  • @Carlos 修复了 #2 以使用 StringIO 代替,因此字符串看起来像一个文件对象。对于 #1,您是添加了两个参数,还是只添加了 engine 一个?
【解决方案2】:

好吧,最后我通过将我用来下载带有 webdriver 的 csv 文件的资源管理器从 Firefox 更改为 Chrome 来解决它,不知道背后的原因是什么,但如果你有同样的问题,这可能会有所帮助未来

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-27
    • 1970-01-01
    • 2021-12-04
    • 2021-12-08
    • 2019-11-13
    • 2018-07-05
    • 2023-03-24
    • 1970-01-01
    相关资源
    最近更新 更多