【问题标题】:failed to read inch symbol in pandas read_csv无法读取 pandas read_csv 中的英寸符号
【发布时间】:2016-12-09 10:42:18
【问题描述】:

我有以下详细信息的 csv

Name,Desc,Year,Location

Jhon,12" Main Third ,2012,GR

Lew,"291" Line (12,596,3)",2012,GR

,All, 1992,FR

...

这是一个很长的文件。我只是显示了有问题的行。我很困惑如何在 Pandas 数据框中读取它,我试过了

  • 引号,

  • 引用,

  • 九月

    类似于 pandas read_csv 的属性。 还是没有成功。

我无法控制 csv 的设计方式。

【问题讨论】:

  • 你的台词是这样的吗:Jhon,12" Main Third ,2012,GR?为什么会有奇数个引号?
  • 12"= 12 英寸(= 1 英尺,= 30.48 厘米)。美国应该完全停止使用IP单元,你就不会有这个问题! :)
  • 我已经说过,我无法更改 CSV。我的问题没有错字。请尝试为我找到解决方案
  • 我只是在回答 MMF 的问题。我对你的 csv 文件的主要问题是这个"291" Line (12,596,3)"。这只是糟糕的设计。
  • MMF:那个是英寸符号

标签: python csv pandas dataframe


【解决方案1】:

你可以做这样的事情。试试这是否适合你:

import pandas as pd
import re

l1=[]
with open('/home/yusuf/Desktop/c1') as f:
    headers = f.readline().strip('\n').split(',')
    for a in f.readlines():
        if a:
            q = re.findall("^(\w*),(.*),\s?(\d+),(\w+)",a)
            if q:
                l1.append(q)

l2 = [list(b[0]) for b in l1]

df = pd.DataFrame(data=l2, columns=headers)
df

输出:

正则表达式演示:https://regex101.com/r/AU2WcO/1

【讨论】:

  • @Notepad 是的。您可能需要微调正则表达式以考虑其他模式。
【解决方案2】:

字段中不能有分隔符。 例如,在

Lew,"291" Line (12,596,3)",2012,GR

Pandas 会假设您有 6 个字段,因为您有 5 个逗号,即使其中两个在引号之间。您需要对文本文件进行一些预处理以消除此问题,或者要求使用不同的分隔符(@ 或 | 在我的经验中似乎效果很好。

Pandas 阅读其他行没有问题:

import pandas as pd
print pd.read_csv('untitled.txt')

   Name             Desc  Year Location
0  Jhon  12" Main Third   2012       GR
1   NaN              All  1992       FR

【讨论】:

  • 这就是我的全部了,csv不是我做的,已经说过了,还需要寻找解决方案
  • @Notepad 是的,您需要先进行一些预处理以消除问题。
  • 这意味着我需要使用 python 处理更大的文件
  • @Notepad 据我所知,是的,你知道。有两种解决方案可以解析带有不完整引号的行和带有引号的行 (pd.read_csv('untitled.txt', quoting=csv.QUOTE_ALL)),但是在尝试其他情况时都会中断。
  • @Notepad 是的。同样,据我所知,解决方案是预处理和修复数据。正是因为这些事情,数据清理变得如此重要 - 格式错误的数据无处不在。
猜你喜欢
  • 2019-07-22
  • 2022-10-13
  • 2017-06-21
  • 2021-12-24
  • 2012-01-26
  • 2021-08-06
  • 2020-04-03
  • 2018-10-03
  • 2016-12-12
相关资源
最近更新 更多