2017-05-25 3 views
-1

私は約100種類のCSVを持っていますが、それらはすべて様々なソースからのデータを含んでおり、したがって異なる区切り文字を持っています。 CSVの構造を推測できるPythonライブラリはありますか?Python:行の最後にカンマを持たないCSVを扱うには?

例えば、誰かがこのようなテーブル持っていた:

color, shape, avg weight, 
red, square, 15g, 
blue, circle, 11g, 

を彼らは保存したCSVのように見えた:私は、私が使用して把握列の数を(知っている場合

'color', 'shape', 'avg weight', 'red', 'square', '15g', 'blue', 'circle', '11g' 

は、関数)リストのリストを作成して、それをpandas DataFrameにすることができます。

color, shape, avg weight 
red, square, 15g 
blue, circle, 11g 

など、彼らが送るCSVのは、見て::

はしかし、人々の多くは、このように、行の末尾にカンマを持っていないデータを持ってそれを取得

'color', 'shape', 'avg weight' 'red', 'square', '15g' 'blue', 'circle', '11g' 

値がない場合でも、悪いことavg weightのような:CSV股関節になり

color, shape, avg weight 
red, square, 
blue, circle, 11g 

次のようになります。

'color', 'shape', 'avg weight' '', 'square', '15g' 'blue', 'circle', '11g' 

どうすれば対処できますか?あるいは、私が探索できるライブラリは何ですか?

+2

データを修正します。一貫した構造が必要です。あるいは、パーサーをプログラムすることはほとんど不可能です。 – gravity

+0

これは私の選択肢ではありません – user1367204

答えて

1

少なくとも引用符については、このアプローチが有効な場合があります。この考え方は、引用された式を正規表現と照合して、データフレームを形成するための列数に関する知識を活用することです。あらかじめ列の数がわからず、引用符に頼ることができない場合は、改行なしでデータを再構築する合理的な方法はないと思います。

import re 
import pandas 

s = "'color', 'shape', 'avg weight' '', 'square', '15g' 'blue', 'circle', '11g'" 

Ncols = 3 
r = re.compile("'([^']*)'") 
items = r.findall(s) 
table = [items[i*Ncols:i*Ncols+Ncols] for i in range(len(items)//Ncols)] 

df = pandas.DataFrame(table[1:], columns=table[0]) 
関連する問題