2016-09-22 1 views
4

私はPythonで400万以上の行を持つcsv.gzファイルの最初の100行だけを取得しようとしています。私はまた、列の数とそれぞれのヘッダーに関する情報が必要です。これどうやってするの?Pythonでcsv.gzファイルを開き、最初の100行を出力する

私はファイルを開く方法を理解するために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 
+0

[質問する](http://stackoverflow.com/help/how-to-ask)を知っていれば、はるかに迅速にヘルプが表示されます。どのようなコードを書いたのですか? – CAB

+0

私の投稿を更新しました。アイデア? – SizzyNini

+1

生ファイルのサンプルを投稿できますか? (端末で 'head filename 'を試してみるなど) – moustachio

答えて

3

、かなりあなたはすでにやった、read_csv以外にも、あなたが数を指定することができnrowsを持っていますデータセットから必要な列を選択します。

また、取得したエラーを防ぐために、error_bad_linesFalseに設定することができます。それでも警告が表示されます(それが気になる場合はwarn_bad_linesFalseに設定してください)。これらは、データセットの記入方法の不一致を示すものです。

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ループを必要とするだろう、他の例で示しています。

+0

ありがとう、それは完璧に働いた – SizzyNini

0

私はあなたが(GZIPモジュールexamplesから)このような何かを行うことができると思い

import gzip 
with gzip.open('/home/joe/file.txt.gz', 'rb') as f: 
    header = f.readline() 
    # Read lines any way you want now. 
1

あなたがリンクした最初の答えは、gzip.GzipFileを使用して示唆されています。これはあなたのために解凍するファイルのようなオブジェクトをあなたに与えます。

これで、ファイル形式のオブジェクトからCSVデータを解析する方法が必要になりました。csv.readerのように。

オブジェクトはフィールド名のリストを提供するので、列、名前、数がわかります。

最初の100個のcsv行オブジェクトを取得する必要があります。これはリンクした2番目の質問と同じように動作し、100個のオブジェクトのそれぞれがフィールドのリストになります。

ここまでは、library indexにリストされているcsvモジュールの存在を知っている以外は、リンク先の質問にすべて説明しています。

1

コードは問題ありません。

パンダread_csv

warn_bad_lines:真のブール値、デフォルト

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). 
関連する問題