我试图只获取csv.gz文件的前100行,该文件在Python中有超过400万行。我还需要关于列的#和每个列的标题的信息。我该怎么做?
我查看了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发布于 2016-09-22 18:25:14
除了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循环来迭代数据,在其他示例中已经显示了这一点。
发布于 2016-09-22 18:02:50
我认为您可以这样做(从gzip模块示例)
import gzip
with gzip.open('/home/joe/file.txt.gz', 'rb') as f:
header = f.readline()
# Read lines any way you want now. 发布于 2016-09-22 18:06:50
您所链接的第一个答案是使用gzip.GzipFile --这给了您一个像文件一样的对象,可以动态地解压缩。
现在您只需要一些方法将csv数据从类似文件的对象中解析出来.就像csv.reader。
csv.reader对象将给出一个字段名列表,这样您就可以知道列、它们的名称以及有多少列。
然后,您需要得到第一个100个csv行对象,它的工作方式与您所链接的第二个问题完全一样,这100个对象中的每一个都是一个字段列表。
到目前为止,除了了解图书馆索引中列出的csv模块的存在外,所有这些都包含在您的链接问题中。
https://stackoverflow.com/questions/39645804
复制相似问题