【问题标题】:Writing to multiple CSV files from a for-loop从 for 循环写入多个 CSV 文件
【发布时间】:2019-10-30 15:37:17
【问题描述】:

我有一个 for loop 来获取股票代码,另一个 for 循环在里面获取股票数据。现在我正在尝试创建 csv 文件,该文件将从第一个 for 循环中获取股票名称的数据,并将股票数据添加到 CSV 文件中。

stock_data = []
with open('Nifty 50 Scrapped data.csv') as csvfile:
    stockticker_data = csv.reader(csvfile, delimiter=' ')
    for row in stockticker_data:
        # print(row)
        all_data = []
        for ticker in row:
            stock_data.append(web.get_data_yahoo(ticker, '1/1/2018', '1/1/2019'))
            with open(ticker, 'w') as f:
                f = open(ticker,'w')
                f.write(stock_data)
                f.close()

我收到以下错误:

    f.write(stock_data)
TypeError: write() argument must be str, not list

print(stock_data) 的输出:

[                   High          Low  ...     Volume    Adj Close
Date                                  ...                        
2018-01-01  1165.000000  1138.099976  ...   591349.0  1127.366211
2018-01-02  1150.000000  1134.050049  ...   516171.0  1126.479004
2018-01-03  1149.000000  1135.300049  ...   593809.0  1125.641235
2018-01-04  1178.000000  1145.900024  ...   729965.0  1155.361816
2018-01-05  1192.000000  1167.449951  ...  1151320.0  1168.373901
...                 ...          ...  ...        ...          ...
2018-12-27  1384.750000  1354.300049  ...  2174090.0  1362.613403
2018-12-28  1383.000000  1359.000000  ...  1705033.0  1356.160278
2018-12-31  1378.000000  1367.300049  ...   698593.0  1363.159546
2019-01-01  1379.699951  1358.599976  ...   664707.0  1361.670410
2019-01-02  1386.849976  1361.599976  ...  1233780.0  1373.335693

[248 rows x 6 columns]]
[                   High          Low  ...     Volume    Adj Close
Date                                  ...                        
2018-01-01  1165.000000  1138.099976  ...   591349.0  1127.366211
2018-01-02  1150.000000  1134.050049  ...   516171.0  1126.479004
2018-01-03  1149.000000  1135.300049  ...   593809.0  1125.641235
2018-01-04  1178.000000  1145.900024  ...   729965.0  1155.361816
2018-01-05  1192.000000  1167.449951  ...  1151320.0  1168.373901
...                 ...          ...  ...        ...          ...
2018-12-27  1384.750000  1354.300049  ...  2174090.0  1362.613403
2018-12-28  1383.000000  1359.000000  ...  1705033.0  1356.160278
2018-12-31  1378.000000  1367.300049  ...   698593.0  1363.159546
2019-01-01  1379.699951  1358.599976  ...   664707.0  1361.670410
2019-01-02  1386.849976  1361.599976  ...  1233780.0  1373.335693

【问题讨论】:

    标签: python csv csv-write-stream


    【解决方案1】:

    此错误告诉您stock_datalist,而write() 方法需要str。知道从web.get_data_yahoo() 返回的数据是pd.DataFrame,如何解决这个问题?我们可以像这样使用pd.to_csv 来做到这一点:

    stock_data = []
    with open('Nifty 50 Scrapped data.csv') as csvfile:
        stockticker_data = csv.reader(csvfile, delimiter=' ')
        for row in stockticker_data:
            # print(row)
            all_data = []
            for ticker in row:
                stock_data.append(web.get_data_yahoo(ticker, '1/1/2018', '1/1/2019'))
                for df in stock_data:
                    df.to_csv(ticker, header=None, index=None, sep=' ', mode='a')
    

    【讨论】:

    • ` tmp = ' '.join(stock_data) TypeError: sequence item 0: expected str instance, DataFrame found `我得到以下错误。即使我可以保留 DataFrame 而不会被覆盖,每次迭代也可以。我正在尝试编写 stock_data。谢谢
    • 这是由于web.get_data_yahoo()返回的数据...你能帮我打印一下吗?
    • 我已经为上面的print(stock_data) : 添加了输出
    • 我在知道web.get_data_yahoo() 返回一个数据框后编辑了我的答案
    • pickle 是一种按原样保存对象的方法。因此,您可以使用dump 函数将stock_data 保存在pickle 文件中。现在,此文件包含列表原样。如果您想随时返回,可以使用load 加载列表。
    猜你喜欢
    • 1970-01-01
    • 2013-03-21
    • 2023-03-25
    • 2018-01-12
    • 2021-07-06
    • 2019-08-04
    • 2016-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多