2016-11-11 13 views
1

私は数百万行のCSVファイルを持っています。私はそれがこれらの操作で超高速であると私はパンダデータフレームを使用して、いくつかの条件に基づいて行をフィルタリングするために今、このPandas Dataframeをcsvリーダーに直接変換する方法は?

with open('us_db.csv', 'rb') as f: 
    data = csv.reader(f) 
    for row in data: 
     Create Dictionary based on a column 

のようなCSVファイル出て辞書を作成するために使用されます。私はpandas Dataframeがいくつかのフィルタリングを行うので、csvをロードします。それから、私は上記をやり続けます。私はパンダを使用することを考えましたdf.iterrows()またはdf.itertuples()しかし、それは本当に遅いです。

pandasデータフレームをcsv.reader()に直接変換して上記のコードを引き続き使用できる方法はありますか? csv_rows = to_csv()を使用すると、長い文字列が返されます。もちろん、私はcsvを書き出し、それからもう一度読むことができます。しかし、余分な読み書きをスキップしてファイルに書き込む方法があるかどうかを知りたい。

答えて

2

あなたはこのような何かを行うことができます。..

import numpy as np 
import pandas as pd 
from io import StringIO 
import csv 

#random dataframe 
df = pd.DataFrame(np.random.randn(3,4)) 

buffer = StringIO() #creating an empty buffer 
df.to_csv(buffer) #filling that buffer 
buffer.seek(0) #set to the start of the stream 

for row in csv.reader(buffer): 
    #do stuff 
+0

ありがとう。それはうまくいった。私がpython2.7を使用していたとき、私はutf-8コーディングにいくつかの問題があったので、StringIO()の代わりにBytesIOを使用しなければなりませんでした。 – Raja

0

をなぜあなたは、ターゲット列に辞書機能を作成して適用されませんか? 何かのように:

df['column_name'] = df['column_name'].apply(Create Dictionary) 
+0

関数内で行全体を使用できるようにする必要があります。適用は、一度に1つの値のみを送信します。一度に1行ではありません。ありがとう。 – Raja

関連する問題