Reputation: 243
I am iterating through the file and want to set value of cell in DataFrame
based on index and column.
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)
I am getting below error
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'
The column 0 in both file is index
Upvotes: 1
Views: 939
Reputation: 10748
I recommend reading in both csv
files with pandas
instead of looping thru save_file
. You can then create various indexing schemes and calculations to move data from qb
to 1pep
. You can structure your code something like this
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)
Right now your code is not clear. There are some initial value dependancies (no_of_shares
and price
) that seem to be circular and some of the calculations seem possibly backwards. Without some example data or an explanation of the structure, concrete code cannot be suggested.
Upvotes: 1