【问题标题】:Import difficulties with read_csvread_csv 的导入困难
【发布时间】:2017-08-18 09:24:01
【问题描述】:

我有一个格式如下的 csv 文件:

0;2017-02-16 15:08:16;81,307877;;;;;;;

因此,分号作为分隔符、日期和时间以及带有小数点逗号的浮点数。最后是一堆分号。

Pandas csv_read 应该是一个很好的解决方案。然而,经过多次尝试,我觉得很卡。我不明白如何处理文件末尾的 ;;; ,我也不确定我是否理解 csv_read 在更详细的控制可能性方面是如何工作的。

对于经常使用 csv_read 的人来说,这一定是一个非常简单的问题……我希望如此。我已经花了很长时间了...

一个例子:

pd.read_csv(r'C:\Users\Henrik\PycharmProjects\Regforce\Kort_del_1.csv', 
encoding="latin", sep=';', decimal=',', usecols=[0, 1, 2, 3])

作为回报,我得到:

   ÿþ0  Unnamed: 1  Unnamed: 2  Unnamed: 3
0      NaN         NaN         NaN         NaN
1      NaN         NaN         NaN         NaN

我还尝试为每一列“强制”类型,但没有结果...???

更新: 我发现了一篇有趣的帖子,http://pythonforengineers.com/website-visitors-part-2-dealing-with-corrupt-data/... 所以我下载了 HEX-reader 并在我的输入文件的开头发现了一些奇怪的东西。这似乎是上表中“ÿþ0”背后的原因。如果我在笔记本中打开它看不到它,但它肯定在文件中。

这可能是文件中 NaN 的来源吗?我该如何处理?似乎 read_csv 能够识别列的存在,但我无法获得任何值...?

【问题讨论】:

    标签: python pandas import


    【解决方案1】:

    我会以这种方式使用read_csv

    df = pd.read_csv('yourfile.csv', sep=';', header=None, decimal=',', usecols=[0,1,2])
    

    所以阅读所有内容,因为你不感兴趣的最后有分号,所以只考虑前三列。

    编辑:感谢 piRSquared 评论,将 decimal=',' 添加到 args。

    【讨论】:

      【解决方案2】:

      问题被确定为与输入文件有关。我做了我应该首先做的事情: - 创建一个与要导入的文件结构相同的新文件,然后 - 测试

      有了这样一个文件,使用 read_csv 的导入花了我不到一分钟的时间来设置和调整以满足我的需要。

      所以,问题转化为理解输入文件。有些东西可以用十六进制阅读器看到,否则是看不到的……但那是一个完全不同的话题。

      【讨论】:

        猜你喜欢
        • 2019-09-03
        • 2017-03-24
        • 1970-01-01
        • 2017-06-28
        • 2020-07-27
        • 1970-01-01
        • 1970-01-01
        • 2013-07-03
        • 2017-02-17
        相关资源
        最近更新 更多