私は、パンダによって読み込まれている一連の非常に乱雑な* .csvファイルを持っています。例のcsvは次のとおりです。pandas.read_csv()内のデータを破棄して、ヘッダ=キーワードを破棄する不正な行を無視します。
Instrument 35392
"Log File Name : station"
"Setup Date (MMDDYY) : 031114"
"Setup Time (HHMMSS) : 073648"
"Starting Date (MMDDYY) : 031114"
"Starting Time (HHMMSS) : 090000"
"Stopping Date (MMDDYY) : 031115"
"Stopping Time (HHMMSS) : 235959"
"Interval (HHMMSS) : 010000"
"Sensor warmup (HHMMSS) : 000200"
"Circltr warmup (HHMMSS) : 000200"
"Date","Time","","Temp","","SpCond","","Sal","","IBatt",""
"MMDDYY","HHMMSS","","øC","","mS/cm","","ppt","","Volts",""
"Random message here 031114 073721 to 031114 083200"
03/11/14,09:00:00,"",15.85,"",1.408,"",.74,"",6.2,""
03/11/14,10:00:00,"",15.99,"",1.96,"",1.05,"",6.3,""
03/11/14,11:00:00,"",14.2,"",40.8,"",26.12,"",6.2,""
03/11/14,12:00:01,"",14.2,"",41.7,"",26.77,"",6.2,""
03/11/14,13:00:00,"",14.5,"",41.3,"",26.52,"",6.2,""
03/11/14,14:00:00,"",14.96,"",41,"",26.29,"",6.2,""
"message 3"
"message 4"**
私はダブルヘッダーは空の列を引き出し、*のcsvファイルをインポートするには、このコードをプロセスを使用して、不正なデータで、問題のある行を削除されています:
DF = pd.read_csv(BADFILE,parse_dates={'Datetime_(ascii)': [0,1]}, sep=",", \
header=[10,11],na_values=['','na', 'nan nan'], \
skiprows=[10], encoding='cp1252')
DF = DF.dropna(how="all", axis=1)
DF = DF.dropna(thresh=2)
droplist = ['message', 'Random']
DF = DF[~DF['Datetime_(ascii)'].str.contains('|'.join(droplist))]
DF.head()
Datetime_(ascii) (Temp, øC) (SpCond, mS/cm) (Sal, ppt) (IBatt, Volts)
0 03/11/14 09:00:00 15.85 1.408 0.74 6.2
1 03/11/14 10:00:00 15.99 1.960 1.05 6.3
2 03/11/14 11:00:00 14.20 40.800 26.12 6.2
3 03/11/14 12:00:01 14.20 41.700 26.77 6.2
4 03/11/14 13:00:00 14.50 41.300 26.52 6.2
私は、ヘッダの後にerronious 1行線を持つファイルを持ってまで、これは結構な仕事をしていた:「ランダムなメッセージをここに031114 073721 031114に083200」
を私はreceieveエラーは次のとおりです。
*C:\Users\USER\AppData\Local\Continuum\Anaconda3\lib\site-
packages\pandas\io\parsers.py in _do_date_conversions(self, names, data)
1554 data, names = _process_date_conversion(
1555 data, self._date_conv, self.parse_dates, self.index_col,
-> 1556 self.index_names, names,
keep_date_col=self.keep_date_col)
1557
1558 return names, data
C:\Users\USER\AppData\Local\Continuum\Anaconda3\lib\site-
packages\pandas\io\parsers.py in _process_date_conversion(data_dict,
converter, parse_spec, index_col, index_names, columns, keep_date_col)
2975 if not keep_date_col:
2976 for c in list(date_cols):
-> 2977 data_dict.pop(c)
2978 new_cols.remove(c)
2979
KeyError: ('Time', 'HHMMSS')*
その行を削除しても、コードは正常に動作します。同様に、ヘッダー=行を削除すると、コードは正常に動作します。しかし、私はこれらのファイルを何百も読んでいるので、これを保存できるようにしたい。
難易度:私はこれらのファイルはかなり大きくなる可能としてpandas.read_csv()への呼び出しの前に、各ファイルを開かないことを好むだろう - ので、私は何度も読み、保存したくありません!また、私は、違反行を削除するためにstringIOバッファとして最初にファイルを開くことを伴わない実際のパンダ/ピジョンソニックソリューションを好むでしょう。
は、あなたが間違ったラインを投稿することができますか?それはエラーが発生するすべての場合に表示される同じ種類の誤った行ですか、またはいくつかのファイルの他の行に他の種類の問題があるかもしれませんか? –
エラーを生成するエラーが発生した行は次のとおりです。 「ランダムなメッセージはここにあります031114 073721から031114 083200」 この行は、すべてのファイルに存在する場合と存在しない場合があります。したがって、私はskiprows = indexだけを上げることはできません。 また、その行の実際のテキストを変更しても、エラーはそのままです。つまり、テキストが何であるかは関係ありませんが、ヘッダーの後に1列しかない行です。 –