[英]Open a csv.gz file in Python and print first 100 rows
我试图只获得Python中有超过400万行的csv.gz文件的前100行。 我还想了解每列的#列和标题的信息。 我怎样才能做到这一点?
我查看了python:从压缩文本文件中读取行以弄清楚如何打开文件,但我正在努力弄清楚如何实际打印前100行并获取列中信息的一些元数据。
我在python中找到了这个读取文件的前N行,但不知道如何将它与打开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
几乎就是你已经完成的事情,除了read_csv
还有nrows
,你可以在其中指定你想要的数据集行数。
此外,为了防止您遇到的错误,您可以将error_bad_lines
设置为False
。 您仍然会收到警告(如果困扰您,请将warn_bad_lines
设置为False
)。 这些表示您的数据集填写方式不一致。
import pandas as pd
data = pd.read_csv('google-us-data.csv.gz', nrows=100, compression='gzip',
error_bad_lines=False)
print(data)
您可以轻松地使用csv
内置库执行类似操作,但它需要一个for
循环来迭代数据,如其他示例所示。
我想你可以做这样的事情(来自gzip模块的例子 )
import gzip
with gzip.open('/home/joe/file.txt.gz', 'rb') as f:
header = f.readline()
# Read lines any way you want now.
您链接的第一个答案建议使用gzip.GzipFile
- 这会为您提供一个类似文件的对象,可以动态解压缩。
现在你只需要一些方法来解析文件类对象中的csv数据...就像csv.reader一样。
csv.reader
对象将为您提供字段名列表,以便您知道列,它们的名称以及有多少列。
然后你需要获得前100个csv行对象,它们将与您链接的第二个问题完全相同,并且这100个对象中的每一个都将是一个字段列表。
到目前为止,除了了解库索引中列出的csv模块的存在之外,这些都包含在您的链接问题中。
你的代码还可以;
pandas read_csv
warn_bad_lines :布尔值,默认为True
If error_bad_lines is False, and warn_bad_lines is True, a warning for each “bad line” will be output. (Only valid with C parser).
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.