2016-11-11 22 views
1

У меня есть файл csv с миллионами строк. Я использовал для создания словаря из файла CSV, как этотКак преобразовать Pandas Dataframe в csv-ридер непосредственно в python?

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

Теперь, чтобы фильтровать строки на основе некоторых условий, которые я использую панд Dataframe как это супер быстрый в этих операциях. Я загружаю csv, поскольку pandas Dataframe выполняет некоторую фильтрацию. Затем я хочу продолжать делать это. Я думал об использовании pandas 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, мне пришлось использовать BytesIO вместо StringIO(), так как у меня были некоторые проблемы с кодировкой utf-8. – Raja

0

Почему вы не наносите Создать словарь функцию целевой столбец? Нечто вроде:

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

Мне нужна вся строка, которая будет доступна внутри функции. Применяйте только одно значение за один раз. Не один ряд за раз. Благодарю. – Raja

Смежные вопросы