2016-07-30 2 views
-1

Вот отрывок из моего кода:Эффективный метод для сопоставления данных в нескольких файлов CSV

for i,r1 in enumerate(Solution.values): 
    h1=ProjectedRevenue.index[i] 
    District_ID,Instrument_ID,Buy_or_not,Revenue=r1 
    listSol=[] 
    listSol.append(h1) 
    listSol.append(list(r1)[0]) 
    listSol.append(list(r1)[1]) 
    for j,r2 in enumerate(ProjectedRevenue.values): 
     h2=ProjectedRevenue.index[j] 
     if h2 == listSol[0]: 
      District_ID,Instrument_ID,Annual_Projected_Revenue= r2 
      listPR=list(r2) 
      if listSol[1] == listPR[1] & listSol[2] == listPR[2]: 
       if(listPR[2]>0): 
        #do stuff 
        continue 
       else: 
        #do stuff 
        continue 

мне нужна помощь по поводу этого кода. Я новичок в python, и мне приходится искать и сравнивать записи данных из нескольких CSV-файлов. Я видел itertuples, но он не может распознать функцию. Поэтому я просто сделал это для поиска и выполнения операций через панды, но это сложность $ O (n^2) $ и очень медленная. Любая помощь по этому поводу?

EDIT: Поэтому я использую панды и numpy в коде для управления данными. И чтобы сделать это более ясным, мне нужно выполнить поиск таким образом, чтобы элементы одинаковых индексов coloumns в двух разных файлах были одинаковыми. Рассмотрим следующий пример:

Solution.csv:

Hospital_ID,District_ID,Instrument_ID 
1,4,6 
2,5,4 
7,8,5 

ProjectedRevenue.csv:

Hospital_ID,District_ID,Instrument_ID 
9,3,5 
7,8,5 
1,2,6 

Так вот общий вход в двух files.I 7,8,5 хотите к знать самый быстрый способ поиска и сопоставить их.

UPDATE: предыдущий вопрос касался ошибки синтаксиса, которая разрешена.

+0

Я знаю, что предыдущая ошибка была глупой. Можете ли вы удалить свой нисходящий знак? Это не привлекает качественных ответов. – Rohinb97

+0

вы можете разместить образцы CSV и желаемого/ожидаемого набора данных/CSV? – MaxU

+0

есть [это] (http://stackoverflow.com/a/38675126/5741205) что вы хотите? – MaxU

ответ

1

попробовать этот векторизованную панд подход:

In [22]: fn1 = r'D:\temp\.data\38673647\Solution.csv' 

In [23]: fn2 = r'D:\temp\.data\38673647\ProjectedRevenue.csv' 

In [24]: df1 = pd.read_csv(fn1) 

In [25]: df2 = pd.read_csv(fn2) 

In [26]: df1 
Out[26]: 
    Hospital_ID District_ID Instrument_ID 
0   1   4    6 
1   2   5    4 
2   7   8    5 

In [27]: df2 
Out[27]: 
    Hospital_ID District_ID Instrument_ID 
0   9   3    5 
1   7   8    5 
2   1   2    6 

In [28]: pd.merge(df1, df2, on=df1.columns.tolist()) 
Out[28]: 
    Hospital_ID District_ID Instrument_ID 
0   7   8    5 
+0

Я постараюсь это точно. Я буду ждать других ответов, прежде чем я приму твое. – Rohinb97

+0

Я пробовал метод, но он кажется медленным. – Rohinb97

+0

@ Rohinb97, на самом деле это должно быть __much__ быстрее по сравнению с вложенным циклом, особенно в больших файлах – MaxU

0

использование : в конце if проверка.

if h2 == listSol[0]: 
+0

Это было так глупо. Я исправлю это. Спасибо. – Rohinb97

+0

Что-нибудь относительно второй части? – Rohinb97

+1

Используйте модуль pandas для второй части –

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