I';我试图使用pd.read_csv()将一个文件加载到Python中,但我无法理解该文件';s格式

I';我试图使用pd.read_csv()将一个文件加载到Python中,但我无法理解该文件';s格式,python,file,upload,Python,File,Upload,这是我关于stackoverflow的第一个问题,所以我必须请您耐心等待 我认为需要加载到Python中的csv文件的格式有问题。我用的是Jupyter笔记本。指向该文件的链接为。 它来自世界不平等数据库数据门户 我很确定分隔符是分号(sep=“;”),因为当我指定此参数时,数据的下半部分会整齐地呈现出来。然而,文件中的前半部分文本似乎毫无意义。我不知道如何告诉函数pd.read\u csv()如何读取它。我怀疑前半部分数据的格式很糟糕。我还尝试了header=None和sep=“|”但没有成功

这是我关于stackoverflow的第一个问题,所以我必须请您耐心等待

我认为需要加载到Python中的csv文件的格式有问题。我用的是Jupyter笔记本。指向该文件的链接为。 它来自世界不平等数据库数据门户

我很确定分隔符是分号(
sep=“;”
),因为当我指定此参数时,数据的下半部分会整齐地呈现出来。然而,文件中的前半部分文本似乎毫无意义。我不知道如何告诉函数pd.read\u csv()如何读取它。我怀疑前半部分数据的格式很糟糕。我还尝试了
header=None
sep=“|”
但没有成功


任何想法或建议都会很有帮助。多谢各位

这在Speadsheet中很常见。你有一些评论,可能到处都是表格。对于内容创建者来说,它看起来很棒,但是CSV是一团乱。您需要预处理CSV,为您的分析创建干净的内容。在这种情况下,这很容易。内容从标题开始,您可以在那里拆分文件。如果标题改变,你会得到一个错误,现在只是一个不眠之夜,弄清楚他们做了什么

import itertools

canned_header_line = "Variable Code;country;year;perc;agdpro999i;"\
    "npopul999i;mgdpro999i;inyixx999i;xlceux999i;xlcusx999i;xlcyux999i"

def scrub_WID_file(in_csv_filename, out_csv_filename):
    with open(in_csv_filename) as in_file,\
            open(out_csv_filename, 'w') as out_file:
        out_file.writelines(itertools.dropwhile(
            lambda line: line.strip() != canned_header_line,
            in_fp))
    if not os.stat.st_size:
        raise ValueError("No recognized header in " + in_csv_filename)

这在纸片上很常见。你有一些评论,可能到处都是表格。对于内容创建者来说,它看起来很棒,但是CSV是一团乱。您需要预处理CSV,为您的分析创建干净的内容。在这种情况下,这很容易。内容从标题开始,您可以在那里拆分文件。如果标题改变,你会得到一个错误,现在只是一个不眠之夜,弄清楚他们做了什么

import itertools

canned_header_line = "Variable Code;country;year;perc;agdpro999i;"\
    "npopul999i;mgdpro999i;inyixx999i;xlceux999i;xlcusx999i;xlcyux999i"

def scrub_WID_file(in_csv_filename, out_csv_filename):
    with open(in_csv_filename) as in_file,\
            open(out_csv_filename, 'w') as out_file:
        out_file.writelines(itertools.dropwhile(
            lambda line: line.strip() != canned_header_line,
            in_fp))
    if not os.stat.st_size:
        raise ValueError("No recognized header in " + in_csv_filename)

将csv本身粘贴到这个问题中,使其永远保留在stackoverflow上,怎么样?@tdelaney至少是文件的相关部分。整个东西可能太大了,它相当小。它可能也是我见过的格式最不一致的垃圾。我对阅读这篇文章的建议是“不要”,但如果你不得不这样做的话,可能需要进行一些预处理,熊猫才能在一次调用
read\u csv()
中理解它。这也可能有用:正如@KBriggs所说的,在处理熊猫之前,您需要先对数据进行预处理。@KBriggs是对的。但是为了帮助大家,我们不妨看看将
sep=None
传递给
read\u csv()
。这需要更长的时间,但它会尝试自动检测分隔符。将csv本身粘贴到这个问题中,使其永远保留在stackoverflow上如何?@tdelaney至少是文件的相关部分。整个东西可能太大了,它相当小。它可能也是我见过的格式最不一致的垃圾。我对阅读这篇文章的建议是“不要”,但如果你不得不这样做的话,可能需要进行一些预处理,熊猫才能在一次调用
read\u csv()
中理解它。这也可能有用:正如@KBriggs所说的,在处理熊猫之前,您需要先对数据进行预处理。@KBriggs是对的。但是为了帮助大家,我们不妨看看将
sep=None
传递给
read\u csv()
。这需要更长的时间,但它试图自动检测分离器。我也注意到了“罐装标题行”,但我看不到更多。我现在可以更好地阅读元数据了!不过,我认为对我来说最简单的事情就是使用
skiprows=8
,然后使用
cols=['my','column','names','here',…]
以及
names=cols
谢谢!我也注意到了“罐装的标题行”,但我看不到更多。我现在可以更好地阅读元数据了!不过,我认为对我来说最简单的事情就是使用
skiprows=8
,然后使用
cols=['my','column','names','here',…]
以及
names=cols
谢谢!