2016-03-20 13 views
1

Ich bin durch die Datei iterieren und Wert der Zelle in DataFrame basierend auf Index und Spalte festlegen möchten.Wert der Zelle in Pandas Datenrahmen zuweisen

f = "D:/Technical_Data/1pep.csv" 
df = pd.read_csv(f, header=0, sep=',') 
save_file = "D:/Result_of_TA/" + "def.csv" 
qbfile = open(save_file,"r") 
for aline in qbfile.readlines(): 
    values = aline.split(",") 
    if values[58].strip()=='BUY' : 
     no_of_shares = price/float(values[4]) 
    if values[58].strip()=='SELL' : 
     price = no_of_shares * float(values[4]) 
    df.ix[values[0],'Price'] = price 
qbfile.close() 
df.to_csv(save_file) 

Ich bin unten Fehler immer

File "pandas\index.pyx", line 137, in pandas.index.IndexEngine.get_loc (pandas\index.c:3979) 
    File "pandas\index.pyx", line 152, in pandas.index.IndexEngine.get_loc (pandas\index.c:3782) 
    File "pandas\index.pyx", line 178, in pandas.index.IndexEngine._get_loc_duplicates (pandas\index.c:4213) 
    File "pandas\index.pyx", line 385, in pandas.index.Int64Engine._maybe_get_bool_indexer (pandas\index.c:7683) 
KeyError: '20150101' 

Die Spalte 0 in beiden Datei-Index

+0

Können Sie ein paar Zeilen Ihrer Daten posten? – tmthydvnprt

+0

Soll * du wirklich deine 'save_file' überschreiben? – tmthydvnprt

Antwort

1

Ich empfehle in beiden csv Dateien mit pandas Lesen statt durch save_file von looping. Sie können dann verschiedene Indexierungsschemata und Berechnungen erstellen, um Daten von qb nach 1pep zu verschieben. Sie können den Code etwas wie dieses

import pandas as pd 

# File locations 
pep1_file = 'D:/Technical_Data/1pep.csv' 
qb_file = 'D:/Result_of_TA/def.csv.csv' 

# Read csv files 
pep1 = pd.read_csv(pep1_file, header=0, sep=',') 
qb = pd.read_csv(qb_file, header=0, sep=',') 

# Process data  
# Find rows with buy in 58th col? 
buy_index = qb.iloc[:, 58].str.contains('BUY') 

# Find rows with sell in 58th col? 
sell_index = qb.iloc[:, 58].str.contains('SELL') 

# Get something from 4th col in buy rows? 
something_from_purchase = qb.ix[buy_index, 4].astype(float) 

# Derive number of shares 
# Where do you get your initial price from? 
# It is used before it is assigned if buy row happens first in the original code? 
no_of_shares = price/something_from_purchase 

# Get something from 4th col in sell rows? 
something_from_sale = qb.ix[sell_index, 4].astype(float) 

# Derive price 
# Where do you get your initial no_of_shares from? 
# It is used before it is assigned if sell row happens first in the original code? 
price = no_of_shares * something_from_sale 

# Assign pep1 price based on qb index 
pep1.loc[qb.index, 'Price'] = price 

# Then write csv file 
# Are sure you want to overwrite? 
pep1.to_csv(qb_file) 

Gerade jetzt Ihr Code ist nicht klar strukturieren. Es gibt einige Anfangswertabhängigkeiten (no_of_shares und price), die kreisförmig zu sein scheinen und einige der Berechnungen scheinen möglicherweise rückwärts zu verlaufen. Ohne einige Beispieldaten oder eine Erläuterung der Struktur kann kein konkreter Code vorgeschlagen werden.

Verwandte Themen