2016-05-20 7 views
0

Ich versuche, einen leeren Datenrahmen zu erstellen und füllen Sie den leeren Datenrahmen mit Spalten in einer anderen Datei vorhanden. Es funktioniert, wenn ich diesen einfachen Code verwende.Erstellen eines leeren Datenrahmens und Füllen mit vorhandener Spalte in einer anderen Datei mit den Bedingungen

InputData['Quote'] = store['QUOTE_ID'] 

aber wenn ich einige Bedingungen vor dem Code hinzufügen, dann ist es nicht die Bedingungen akzeptieren und gibt dieselben Werte wie im Speicher (original) Datei. unten ist mein Code, den ich versuche zu verwenden.

ursprünglicher Datensatz

InputData = pd.read_csv('datalink') 

leeren Datenrahmen

OutputData=pd.DataFrame() 

Code mit Bedingungen

for i in xrange(len(InputData.index)): 
    if (i % 5000) == 0: 
     print i, 
    if ((InputData.ix[i,'WIN']=='Y') and   ((InputData.ix[i,'COM_C']=='H') or (InputData.ix[i,'COM_C']=='S')) and(InputData.ix[i,'COM_L']!=0)): 
     OutputData['Quote']=InputData['QUOTE_ID'] 
     OutputData['ComList']=InputData['COM_LISTPR'] 
     OutputData['WIN']=1 
     OutputData['COM_C']=InputData['COM_C'] 


OutputData.to_csv(link,index=False) 

ursprünglicher Datensatz

QUOTE_ID WIN COM_C COM_L 
1400453-IT N H 1.46E+05 
1400453-IT N H 7.12E+04 
1400453-IT N H 2.74E+04 
1403796-IT Y S 3.11E+04 
1400453-IT N M 3.12E+02 
1403796-IT Y H 3.97E+04 
1403796-IT Y H 3.97E+04 
1403796-IT Y M 1.99E+02 
1403796-IT Y M 1.99E+02 
1403796-IT Y H 7.40E+04 
1403796-IT Y H 7.40E+04 
1403796-IT Y M 3.19E+02 
1403796-IT Y M 3.19E+02 
1403796-IT Y H 9.56E+04 
012 Schaffung

erwartet Datensatz

nur Y von Inputdata erfordern und ersetzen auf 1, wenn Y

 Quote WIN COM_C COM_LISTPR 
1403796-IT 1 S 3.11E+04 
1403796-IT 1 H 3.97E+04 
1403796-IT 1 H 3.97E+04 
1403796-IT 1 H 7.40E+04 
1403796-IT 1 H 7.40E+04 
1403796-IT 1 H 9.56E+04 

vielen Dank im Voraus

Antwort

1

Python-Code -

import pandas as pd 

df = pd.read_csv('a.csv', delim_whitespace=True) # reading file 

modified_df = df[(df['WIN'] == 'Y') & ((df['COM_C'] == 'S') | (df['COM_C'] == 
                   'H')) & 
       (df['COM_L'] != 
        0)].copy() 

modified_df['WIN'] = 1 

print(modified_df) 

Ausgang -

 QUOTE_ID WIN COM_C COM_L 
3 1403796-IT 1  S 31100 
5 1403796-IT 1  H 39700 
6 1403796-IT 1  H 39700 
9 1403796-IT 1  H 74000 
10 1403796-IT 1  H 74000 
13 1403796-IT 1  H 95600 
+1

Ich wusste nicht, Dataframe hatte ein Ersetzen-Attribut, gut zu wissen. Aber da es nur 'Y' in der Spalte 'WIN' gibt, könntest du genauso gut verwenden: modified_df ['WIN'] = 1 – ysearka

+0

Ich habe eine Warnung erhalten, als ich das versuchte - 'SettingWithCopyWarning: Ein Wert versucht es auf eine Kopie eines Slices von einem DataFrame gesetzt werden. Versuchen Sie mit .loc [row_index, col_indexer] = Wert stattdessen " –

+1

Ja, weil die Art und Weise, Sie definiert Modified_df, es ist ein Bild von df, kein ganz neues Objekt. Wenn Sie beim ersten Definieren von "modified_df" .copy() hinzufügen, wird die Warnung nicht mehr angezeigt. – ysearka

Verwandte Themen