【问题标题】:Melting multiple csv files not working, only melts one of the csv files熔化多个 csv 文件不起作用,只熔化一个 csv 文件
【发布时间】:2018-11-05 11:15:45
【问题描述】:

在将多个 csv 文件 (500) 合并为一个 csv 文件时遇到问题。运行应用程序时,它会根据需要创建一个 csv 文件,但只有一个代码。似乎它不会遍历所有存储的 csv 文件。 这就是输出的样子:CSV output

    for count, ticker in enumerate(tickers):
    df = pd.read_csv('stock_dfs/{}.csv'.format(ticker))
    df.set_index('Date', inplace=True)

    df.rename(columns={'Adj Close': ticker}, inplace=True)
    df.drop(['Open', 'High', 'Low', 'Close', 'Volume'], 1, inplace=True)

    main_df = pd.DataFrame()

    df = df.reset_index()
    df = df.melt(id_vars=['Date'], var_name='Ticker', value_name='Closed')

    main_df = main_df.append(df)

    print(main_df.head())
main_df.to_csv('sp500_joined_closes.csv')

编译数据()

【问题讨论】:

  • 我不确定你想通过if/else 那里的逻辑来实现什么 - 你有一个main_df = pd.DataFrame() 你应该附加到的地方......你不能只是建立一个大的数据框,然后将其写入输出?
  • 您在 for 循环中为每个代码修改 main_df(删除任何以前的值),但将其导出到 for 循环之外。因此,仅导出最终代码。
  • 应该:main_df = pd.DataFrame() df = df.reset_index() df = df.melt(id_vars=['Date'], var_name='Ticker', value_name='Closed' ) main_df = main_df.append(df) print(main_df.head()) main_df.to_csv('sp500_joined_closes.csv') 是否包含在 for 循环中? @ason​​gtoruin
  • 嘿 JonClements,我像 @Charles R 提议的那样更改了它,但仍然只生成一个代码。

标签: python pandas dataframe web-scraping concatenation


【解决方案1】:

尝试实例化一个空数据框,而不是 if / else,您将使用每个融化的 df 填充该数据框。

main_df = pd.DataFrame()

for count, ticker in enumerate(tickers):
    df = pd.read_csv('stock_dfs/{}.csv'.format(ticker))
    df.set_index('Date', inplace=True)

    df.rename(columns={'Adj Close': ticker}, inplace=True)
    df.drop(['Open', 'High', 'Low', 'Close', 'Volume'], 1, inplace=True)

    df = df.reset_index()
    df = df.melt(id_vars=['Date'], var_name='Ticker', value_name='Closed')

    main_df = main_df.append(df)

    if count % 10 == 0:
        print(count)

print(main_df.head())
main_df.to_csv('sp500_joined_closes.csv')

【讨论】:

  • 我将代码更改为: main_df = pd.DataFrame() df = df.reset_index() df = df.melt(id_vars=['Date'], var_name='Ticker', value_name= '关闭') main_df = main_df.append(df) print(main_df.head()) main_df.to_csv('sp500_joined_closes.csv')
  • 但仍然只取最后一个csv文件
  • 您是否在 for 循环中放置了一个 print 以确保它实际上找到了多个文件?
  • 我最近确实更新了答案。你用的是新的吗?
猜你喜欢
  • 1970-01-01
  • 2013-08-03
  • 1970-01-01
  • 1970-01-01
  • 2017-06-07
  • 2010-12-05
  • 2021-10-05
  • 2019-01-02
  • 2019-10-11
相关资源
最近更新 更多