Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python使用特定的行终止符读取CSV文件_Python_Pandas - Fatal编程技术网

Python使用特定的行终止符读取CSV文件

Python使用特定的行终止符读取CSV文件,python,pandas,Python,Pandas,我试图从下面给出的示例csv创建一个数据帧,但我得到了错误的标记化数据。C错误:从第0行开始的字符串内的EOF。我没有太多的练习来处理糟糕的线条,但我真的很想学习处理这种事情的最佳方法。我尝试了许多不同的读取csv选项,如error\u bad\u line=False,但也没有成功 CParserError: Error tokenizing data. C error: EOF inside string starting at line 0 我猜是“的行终止符引起了这个问题,我猜最好的方

我试图从下面给出的示例csv创建一个数据帧,但我得到了错误的标记化数据。C错误:从第0行开始的字符串内的EOF。我没有太多的练习来处理糟糕的线条,但我真的很想学习处理这种事情的最佳方法。我尝试了许多不同的读取csv选项,如error\u bad\u line=False,但也没有成功

CParserError: Error tokenizing data. C error: EOF inside string starting at line 0
我猜是“的行终止符引起了这个问题,我猜最好的方法是循环通过每一行和进程,所以我在另一个不同的人的帮助下想出了下面的生成器,希望我能接近。我真的很想学习如何使用生成器并为此做出让步

样本数据:

"USNC3255","27","US","NC","LANDS END","72305006","KNJM","KNCA","KNKT","T72305006","","","NCC031","NCZ095","","545","28594","America/New_York","34.65266","-77.07661","7","RDU","893727","
"USNC3256","27","US","NC","LANDSDOWN","72314058","KEHO","KAKH","KIPJ","T72314058","","","NCC045","NCZ068","sc007","517","28150","America/New_York","35.29374","-81.46537","797","CLT","317845","
我制作了以下代码,删除了最后两个字符,但不确定能否从行中生成数据帧:

def big_table_generator(filename):
    with open(filename, 'rt') as f:
        for line in f:
            yield line[:-3]

gen = big_table_generator('../data/test_sun_file.csv')
pd.DataFrame(gen)

这是我提出的解决方案,但我真的想避免使用list和append,而是利用生成器,但使用生成器还不够舒适

def parse_file(filename):

    newline = []

    with open(filename, 'rb') as f:
        reader = csv.reader(f, quoting=csv.QUOTE_NONE)
        for row in reader:
            newline.append([s.strip('"') for s in row[:-1]])
    df = pd.DataFrame(newline)
    df = df.applymap(lambda x: nan if len(x) == 0 else x).astype(object)
    return df

df = parse_file(filename)

这是我提出的解决方案,但我真的想避免使用list和append,而是利用生成器,但使用生成器还不够舒适

def parse_file(filename):

    newline = []

    with open(filename, 'rb') as f:
        reader = csv.reader(f, quoting=csv.QUOTE_NONE)
        for row in reader:
            newline.append([s.strip('"') for s in row[:-1]])
    df = pd.DataFrame(newline)
    df = df.applymap(lambda x: nan if len(x) == 0 else x).astype(object)
    return df

df = parse_file(filename)

我有一个类似的错误。通过使用选项quoting=csv.QUOTE\u NONE in read\u csv修复了它

例如:

df = pd.read_csv(csvfile, header = None, delimiter="\t", quoting=csv.QUOTE_NONE, encoding='utf-8')

关于第二条评论中的原因的一些信息:

我有一个类似的错误。通过在read\u csv中使用quoting=csv.QUOTE\u NONE选项修复了它

例如:

df = pd.read_csv(csvfile, header = None, delimiter="\t", quoting=csv.QUOTE_NONE, encoding='utf-8')

关于为什么在这里的第二条注释中出现的一些信息:

您能解释一下示例数据中的数据点是如何格式化的,以及您希望数据帧是什么样子吗?我不确定您所说的数据点是如何格式化的。这些行只是文件中带有逗号分隔值和引号字符的行。尝试只使用p生成一个数据框,其中的列由类似于任何读取csv过程的值填充。您能否解释示例数据中的数据点是如何格式化的,以及您希望数据框是什么样子的?我不确定数据点是如何格式化的。这些行只是文件中带有逗号分隔值和q的行uote字符。尝试生成一个数据框,其中的列由类似于任何读取csv过程的值填充。