2016-06-19 3 views
-2

Я пытаюсь написать dataframe в .csv, используя df.to_csv(). По какой-то причине он записывает только последнее значение (данные для последнего тикера). Он читает список тикеров (черепаха, все тикеры в первой колонке) и выдает данные о ценах для каждого тикера. Я могу распечатать все данные без проблем, но не могу писать в .csv. Любая идея почему? БлагодаряDataframe to .csv - записывает только последнее значение - Python/Pandas

input_file = pd.read_csv("turtle.csv", header=None) 

for ticker in input_file.iloc[:,0].tolist(): 
    data = web.DataReader(ticker, "yahoo", datetime(2011,06,1),  datetime(2016,05,31)) 
    data['ymd'] = data.index 
    year_month = data.index.to_period('M') 
    data['year_month'] = year_month 
    first_day_of_months = data.groupby(["year_month"])["ymd"].min() 
    first_day_of_months = first_day_of_months.to_frame().reset_index(level=0) 
    last_day_of_months = data.groupby(["year_month"])["ymd"].max() 
    last_day_of_months = last_day_of_months.to_frame().reset_index(level=0) 
    fday_open = data.merge(first_day_of_months,on=['ymd']) 
    fday_open = fday_open[['year_month_x','Open']] 
    lday_open = data.merge(last_day_of_months,on=['ymd']) 
    lday_open = lday_open[['year_month_x','Open']] 

    fday_lday = fday_open.merge(lday_open,on=['year_month_x']) 
    monthly_changes = {i:MonthlyChange(i) for i in range(1,13)} 

    for index,ym, openf,openl in fday_lday.itertuples(): 
      month = ym.strftime('%m') 
      month = int(month) 
      diff = (openf-openl)/openf 
      monthly_changes[month].add_change(diff) 

    changes_df = pd.DataFrame([monthly_changes[i].get_data() for i in monthly_changes],columns=["Month","Avg Inc.","Inc","Avg.Dec","Dec"]) 

    CSVdir = r"C:\Users\..." 
    realCSVdir = os.path.realpath(CSVdir) 

    if not os.path.exists(CSVdir): 
     os.makedirs(CSVdir) 

    new_file_name = os.path.join(realCSVdir,'PriceData.csv') 
    new_file = open(new_file_name, 'wb') 

    new_file.write(ticker) 
    changes_df.to_csv(new_file) 
+1

вместо 'wb' использовать' a' для добавления. – shivsn

+1

вы переписываете CSV-файл «PriceData.csv» в цикле ... Я также предлагаю вам опубликовать образец нужного файла CSV - я думаю, что это можно сделать намного проще ... – MaxU

+1

. @ Rage. Я бы рекомендовал искать учебники python, прежде чем размещать больше вопросов. ---- приведенный выше код неправильно использует «for-loop». для установки даты. – Merlin

ответ

2

Использование a для добавления вместо wb, потому что он переписывает данные в каждой итерации loop.For различных режимов открытия файла см here.

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