【问题标题】:Dataframe to .csv - is only writing last value - Python/Pandas数据框到 .csv - 仅写入最后一个值 - Python/Pandas
【发布时间】:2016-06-19 20:22:52
【问题描述】:

我正在尝试使用 df.to_csv() 将数据帧写入 .csv。出于某种原因,它只写入最后一个值(最后一个代码的数据)。它读取代码列表(乌龟,所有代码都在第一列)并为每个代码吐出价格数据。我可以毫无问题地打印所有数据,但似乎无法写入 .csv。知道为什么吗?谢谢

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)

【问题讨论】:

  • 而不是 wb 使用 a 进行追加。
  • 您正在循环覆盖您的 'PriceData.csv' CSV 文件...我还建议您发布所需 CSV 文件的样本 - 我认为它可以更容易完成.. .
  • .@Rage。我建议在发布更多问题之前先查看 python 教程。 ---- 上面的代码错误地使用了'for-loop'。用于设置日期信息。
  • @梅林,你说的是这部分代码吗:
  • for index,ym, openf,openl in fday_lday.itertuples(): month = ym.strftime('%m') month = int(month) diff = (openf-openl)/openfmonthly_changes [月].add_change(diff)

标签: python csv pandas dataframe


【解决方案1】:

使用a而不是wb进行追加,因为它会覆盖循环的每次迭代中的数据。有关打开文件的不同模式,请参阅here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-07
    • 1970-01-01
    • 2020-07-18
    • 2020-02-17
    • 2017-10-09
    • 1970-01-01
    • 1970-01-01
    • 2015-12-05
    相关资源
    最近更新 更多