我试图只获取一个csv. gz文件的前100行,该文件在Python中有超过400万行。我还希望列的#和每个标题的信息。我该怎么做?
我查看了python: read lines from compressed text files来弄清楚如何打开文件,但我很难弄清楚如何实际打印前100行并获取列中信息的一些元数据。
我找到了这个Read first N lines of a file in python,但不知道如何将它与打开csv. gz文件结合起来,并在不保存未压缩的csv文件的情况下阅读它。
我写了这段代码:
import gzip
import csv
import json
import pandas as pd
df = pd.read_csv('google-us-data.csv.gz', compression='gzip', header=0, sep=' ', quotechar='"', error_bad_lines=False)
for i in range (100):
print df.next()
我是Python的新手,我不理解结果。我确信我的代码是错误的,我一直在尝试调试它,但我不知道该看哪个文档。
我得到了这些结果(它一直在控制台上运行-这是一个摘录):
Skipping line 63: expected 3 fields, saw 7
Skipping line 64: expected 3 fields, saw 7
Skipping line 65: expected 3 fields, saw 7
Skipping line 66: expected 3 fields, saw 7
Skipping line 67: expected 3 fields, saw 7
Skipping line 68: expected 3 fields, saw 7
Skipping line 69: expected 3 fields, saw 7
Skipping line 70: expected 3 fields, saw 7
Skipping line 71: expected 3 fields, saw 7
Skipping line 72: expected 3 fields, saw 7
5条答案
按热度按时间lmvvr0a81#
与您已经做过的差不多,除了
read_csv
还有nrows
,您可以在其中指定数据集中想要的行数。此外,为了防止出现错误,可以将
error_bad_lines
设置为False
。您仍然会收到警告(如果这让您感到困扰,请将warn_bad_lines
也设置为False
)。它们用于指示数据集填写方式的不一致性。您可以使用
csv
内置库轻松执行类似的操作,但它需要for
循环来迭代数据,如其他示例所示。edqdpe6u2#
我认为你可以做这样的事情(从gzip模块的例子)
w51jfk4q3#
您链接的第一个答案建议使用
gzip.GzipFile
-这将为您提供一个类似文件的对象,可以动态解压缩。现在您只需要某种方法将CSV数据解析出一个类似文件的对象。。像csv.reader.
csv.reader
对象将给予一个字段名列表,这样您就可以知道列、它们的名称以及有多少列。然后,您需要获取前100个csv行对象,其工作方式与您链接的第二个问题中的工作方式完全相同,这100个对象中的每个对象都将是一个字段列表。
到目前为止,除了知道library index中列出的csv模块的存在之外,所有这些都包含在您的链接问题中。
pn9klfpd4#
你的代码没问题;
Pandasread_csv
warn_bad_lines:布尔值,默认值True
gorkyyrv5#
对于那些希望使用
gzip
和csv.reader
读取gzip CSV文件的用户:'rt'代表以文本模式读取。
参考:https://blog.finxter.com/how-to-convert-a-csv-gz-to-a-csv-in-python/