污染CSV文件。列中的逗号,值成千上万

时间:2019-02-10 19:32:38

标签: python-3.x pandas csv

我认为数据清理存在小问题。包含在CSV文件enter link to CSV中。有人在第7行的“ length ft”列中添加了逗号。我指出了图片上的位置。 enter image description here

 df=pd.read_csv('c:/2/runways.csv', error_bad_lines  = True)
 print(df)

 df=pd.read_csv('c:/2/runways.csv', thousands=',')
 print(df)

 df=pd.read_csv('c:/2/runways.csv', decimal = ',')

上述我知道的说明无效。 数据清理方法对我来说至关重要。 请帮我。 每个帮助都会被授予(当我的声誉超过15时。)

2 个答案:

答案 0 :(得分:2)

我并没有太靠近数据文件,但是它似乎遵循一种非常简单的模式:#,#,"cccc",#,#...(其中#是一个数字,c是一个字母数字字符)。

该模式可以很容易地转换为正则表达式模式,例如:^(\d+,\d+,"[\dA-Z]{4}",)(\d+),(\d{3},\d+)此RegEx模式将检测“ airport_ident”和“ surface”字段之间包含3组逗号分隔数字的行,更重要的是,则只有当该组的第二个数字正好为3位数字长时,它才会匹配,因为这表明该逗号应用作千位分隔符。

由于分组,您可以利用向后引用替换成千上万的分隔符。例如,在Atom(文本编辑器)中弄乱了它,我使用了$1$2$3的RegEx替换模式,因为千位分隔符逗号不在第二和第三捕获组之内。在python中,就像

import re

raw_lines = ""
with open('/path/to/file', 'r') as fh:
    raw_lines = fh.read()

cleaned_lines = re.sub(
        r'^(\d+,\d+,"[\dA-Z]{4}",)(\d+),(\d{3},\d+)',
        r'\1\2\3',
        raw_lines,
        re.IGNORECASE
)

这就是说,正如his answer中报道的用尽情况一样,当我在文本编辑器中打开CSV文件时,我没有看到任何有问题的行。

答案 1 :(得分:1)

我在excel中打开了您的csv文件,而excel引擎似乎已处理了逗号。我在length_ft列中显示1700。当我将此文件另存为xlsx而不是csv,然后使用pd.read_excel('runways.xlsx')时,文件似乎可以正确打开。 Excel版本是Office 2010 Professional plus。

    id  airport_ref airport_ident   length_ft   width_ft    surface lighted closed  le_ident    le_latitude_deg le_longitude_deg    le_elevation_ft le_heading_degT le_displaced_threshold_ft   he_ident    he_latitude_deg he_longitude_deg    he_elevation_ft he_heading_degT he_displaced_threshold_ft
0   269408  6523    00A     80.0    80.0    ASPH-G  1   0   H1  NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1   255155  6524    00AK    2500.0  70.0    GRVL    0   0   N   NaN NaN NaN NaN NaN S   NaN NaN NaN NaN NaN
2   254165  6525    00AL    2300.0  200.0   TURF    0   0   1   NaN NaN NaN NaN NaN 19  NaN NaN NaN NaN NaN
3   270932  6526    00AR    40.0    40.0    GRASS   0   0   H1  NaN NaN NaN NaN NaN H1  NaN NaN NaN NaN NaN
4   322128  322127  00AS    1450.0  60.0    Turf    0   0   1   NaN NaN NaN NaN NaN 19  NaN NaN NaN NaN NaN
5   257681  6527    00AZ    1700.0  60.0    GRAVEL  0   0   15  NaN NaN NaN NaN NaN 33  NaN NaN NaN NaN NaN
6   245528  6528    00CA    6000.0  80.0    ASPH    0   0   4   35.3493 -116.8930   NaN 50.0    NaN 22  35.3603 -116.8780   NaN NaN NaN
7   250597  6529    00CO    3900.0  20.0    TURF-G  0   0