2017-10-25 14 views
0

私は私が読みたいいくつかのCSVファイルを持っている、何らかの理由でこのパンダ、N行後にcsvの読み込みを停止する方法は?

A B C 
1 3 1 
2 2 2 
3 1 3 


D 
1 
2 
3 

のようにフォーマットされ、それが終了したら、ここでの問題は、その列のDは、他の列の下にあり、これはパンダは非常に不幸になりです列Aを読み、Dの列名文字列にまっすぐに飛び込みます。

私はもちろん、基本的には

pd.read_csv(file, skiprows=1, nrows = rows_in_A_B_C) 

nrows = length_of_A_B_Cようにそれを読むことができます。問題は、私はDの前に行の数を知らない、と私は私がするまで私はCSVを読むことができません。

どうすればこの問題を解決できますか?代わりに条件に基づいて行の読み込みを停止することはできますか?たとえば、Dのヘッダーを押したときなどです。

+0

エレガントなソリューションではありませんが、追加の列を新しいファイルに手作業で移動することはできます。次に、インポートしてからマージすることができる2つの適切なcsvファイルがあります。 –

+2

私はそれを1000 +ファイルにしたのですが、ずっと前に自分自身を撃つでしょう) –

+1

https://stackoverflow.com/a/34188535/6066986 – Grynets

答えて

0

可能な答えは、元の投稿へのコメントに既に掲載されていましたが、私はまだ彼らが、簡単な作業のために、飛行機で考えるのが不必要に難しいと感じました(あるいは、 。私の場合、私は次のように最善の方法があったことを考え出し:

df = pd.read_csv(file, dtype = "str", names = ["A","B","C"]) 

今パンダはNaNにして、すべての空の下の行に必要事項を記入し、これは、列Dが中に含まれているすべての行をマークするために起こるすべてのこと。

df = df[df["A"].str.contains("NaN") == False] 

を我々は、数値データフレームとして

df = df.apply(pd.to_numeric) 

をそれを必要とするので、今これが唯一のDを解析するための行をスキップするために使用することができます:これらの行は、捨てることができ

D_only = pd.read_csv(file, skiprows = len(df["A"]) 

そしてpd.concat(df, D_only), axis=1)

免責事項と連結:私は、これは、計算上でどのように効率的に知りません。

関連する問題