2016-04-24 11 views
1

ここでもう一度やります。pandasを使用してcsvファイルをインポートするヘッダー区切り文字を検出するread_csv

こんにちは、CSVファイルのエラーを検出しようとしています。

goodfile.csv 

    "COL_A","COL_B","COL_C","COL_D" 
    "ROW1COLA","ROW1COLB","ROW1COLC","ROW1COLD" 
    "ROW2COLA","ROW2COLB","ROW2COLC","ROW2COLD" 
    "ROW3COLA","ROW3COLB","ROW3COLC","ROW3COLD" 
    "ROW4COLA","ROW4COLB","ROW4COLC","ROW4COLD" 
    "ROW5COLA","ROW5COLB","ROW5COLC","ROW5COLD" 
    "ROW6COLA","ROW6COLB","ROW6COLC","ROW6COLD" 
    "ROW7COLA","ROW7COLB","ROW7COLC","ROW7COLD" 

に従いますが、私が持っているファイルが実際に

brokenfile.csv 

    "COL_A","COL_B",COL C,"COL_D" 
    "ROW1COLA","ROW1COLB","ROW1COLC","ROW1COLD" 
    "ROW2COLA","ROW2COLB","ROW2COLC","ROW2COLD" 
    "ROW3COLA","ROW3COLB","ROW3COLC","ROW3COLD" 
    "ROW4COLA","ROW4COLB","ROW4COLC","ROW4COLD" 
    "ROW5COLA","ROW5COLB","ROW5COLC","ROW5COLD" 
    "ROW6COLA","ROW6COLB","ROW6COLC","ROW6COLD" 
    "ROW7COLA","ROW7COLB","ROW7COLC","ROW7COLD" 

私はパンダ

data = pd.read_csv('goodfile.csv') 
    data = pd.read_csv('brokenfile.csv') 

で2つのファイルをインポートすると私は同じを取得しているとして、ファイルが見えるはずです結果

data 

      COL_A  COL_B  COL_C  COL_D 
    0 ROW1COLA ROW1COLB ROW1COLC ROW1COLD 
    1 ROW2COLA ROW2COLB ROW2COLC ROW2COLD 
    2 ROW3COLA ROW3COLB ROW3COLC ROW3COLD 
    3 ROW4COLA ROW4COLB ROW4COLC ROW4COLD 
    4 ROW5COLA ROW5COLB ROW5COLC ROW5COLD 
    5 ROW6COLA ROW6COLB ROW6COLC ROW6COLD 
    6 ROW7COLA ROW7COLB ROW7COLC ROW7COLD 

とにかく、私が欲しいのは、現在COL_C

+0

あなたは '引用を渡すことができます= 3' read_csv''にそうPANDそれらの文字は削除されませんが、両方のファイルは有効なcsvファイルです。私はパンダがエラーを起こす理由はないと思う。 – ayhan

+0

ヘッダが二重引用符で囲まれていない場合のみ検出するのが目的ですか?一重引用符はどうですか?その他の「エラー」を検出する必要がありますか?また、同じ結果を得るべきではありません。一つのデータには「COL_C」と別の「COL C」があります。 – Jarad

答えて

1

私はあなたが~により反転boolean arraystr.containsboolean indexingDataFrameの列に"が欠落検出することができると思う:

import pandas as pd 
import io 

temp=u'''"COL_A","COL_B",COL C,"COL_D" 
"ROW1COLA","ROW1COLB","ROW1COLC","ROW1COLD" 
"ROW2COLA","ROW2COLB","ROW2COLC","ROW2COLD" 
"ROW3COLA","ROW3COLB","ROW3COLC","ROW3COLD" 
"ROW4COLA","ROW4COLB","ROW4COLC","ROW4COLD" 
"ROW5COLA","ROW5COLB","ROW5COLC","ROW5COLD" 
"ROW6COLA","ROW6COLB","ROW6COLC","ROW6COLD" 
"ROW7COLA","ROW7COLB","ROW7COLC","ROW7COLD"''' 
#after testing replace io.StringIO(temp) to filename 
df = pd.read_csv(io.StringIO(temp), quoting = 3) 
print df 
     "COL_A"  "COL_B"  COL C  "COL_D" 
0 "ROW1COLA" "ROW1COLB" "ROW1COLC" "ROW1COLD" 
1 "ROW2COLA" "ROW2COLB" "ROW2COLC" "ROW2COLD" 
2 "ROW3COLA" "ROW3COLB" "ROW3COLC" "ROW3COLD" 
3 "ROW4COLA" "ROW4COLB" "ROW4COLC" "ROW4COLD" 
4 "ROW5COLA" "ROW5COLB" "ROW5COLC" "ROW5COLD" 
5 "ROW6COLA" "ROW6COLB" "ROW6COLC" "ROW6COLD" 
6 "ROW7COLA" "ROW7COLB" "ROW7COLC" "ROW7COLD" 

print df.columns 
Index([u'"COL_A"', u'"COL_B"', u'COL C', u'"COL_D"'], dtype='object') 

print df.columns.str.contains('"') 
[ True True False True] 

print ~df.columns.str.contains('"') 
[False False True False] 

print df.columns[~df.columns.str.contains('"')] 
Index([u'COL C'], dtype='object') 
+1

うわー、それは素晴らしかった、私はあなたのように多くのことを学ばなければならない。ありがとうございました。 –

+0

はい、私は1日に2回私を保存しました。ありがとうございました。どこでこのトピックの詳細を知ることができますか?私はフリーランサーとして始めて、私はそれがパイソンプログラミングを知っていると思っていましたが、私は学ぶべきことがたくさんあることがわかります。私の英語が完璧でない場合は申し訳ありません。ベネズエラからのご挨拶! –

+0

ご挨拶からスロバキア。 :)私は['pandas'](http://pandas.pydata.org/pandas-docs/stable/index.html)のdocsは素晴らしいと思います。たくさんのサンプルがあります。私の経験 - 最高の学習はStackOverflowに答えようとしています。 – jezrael

0

パンダは、データの読み込み時にデータ型を認識について、スマートになろうとしているヘッダの間で「」欠けている二番目のファイル「brokenfile.csv」でエラーを検出することです。これはまさにあなたが記述している場合に起きていることです。COL_C"COL_C"は両方とも実際に文字列として解析されます。

要するに、検出するエラーはありません。このような場合、少なくともパンダはエラーを発生しません。

あなたは、ヘッダーで不足している引用符を検出したい場合、あなたは何ができるか、あなたはより多くの「伝統的な」神託のように、最初の行を読み込み、そこから自分の結論を作るために試みることができる:

>>> with open('filename') as f: 
     lines = f.readlines() 
     .... 
+0

はい、私はパンダが本当にスマートであることを知っています。しかし、プログラムを書く際に、ヘッダーに ""がないことをユーザーに警告したい。 –

+0

パンダに関してはここではエラーはありません。このようなケースでは、何らかのエラーや警告を出すためにパンダにどのような仕組みができるのか分かりません。更新された回答をご覧ください。 – Thanos

関連する問題