【问题标题】:Loading multiple CSV files into one nested dictionary将多个 CSV 文件加载到一个嵌套字典中
【发布时间】:2020-01-13 19:11:03
【问题描述】:

我有多个 CSV 文件(每个股票代码一个),我想将它们加载到嵌套字典中,例如:

market_data["Symbol"] = { "Open": [], "High": [], "Low": [], "Close": [],
    "Volume": [], "Adjusted": [], "Date": [], "MA_10":[] }

我对每个交易品种都有一个不同的 CSV 文件,每个 CSV 文件都有 Open、High、Low 等数据,但名称不一定相同。我想将它加载到该数据结构中,但我无法弄清楚。

我希望它看起来像:

打印市场数据

{'SYMBOL2': {'High': [20, 22, 23, 19, 21], '音量': [100, 200, 300, 400, 500], '调整': [12, 13, 14, 15, 16], '低': [10, 12, 13, 9, 1],'MA_10':[],'日期':['2015-01-01','2015-01-02','2015-01-03', '2015-01-04', '2015-01-05'], '关闭': [15, 15, 15, 11, 16], '打开': [12, 13, 14, 15, 16]}, 'SYMBOL1': {'High': [20, 22, 23, 19, 21], “音量”:[100、200、300、400、500],“调整后”:[12、13、14、15、16], '低': [10, 12, 13, 9, 1], 'MA_10': [], '日期': ['2015-01-01', '2015-01-02', '2015-01-03', '2015-01-04', '2015-01-05'], '关闭': [15, 15, 15, 11, 16], '打开': [12, 13, 14, 15, 16]}}

【问题讨论】:

  • 请提供一些例子
  • 您能否详细说明这些 csv 文件的来源?
  • 欢迎来到 SO。这不是讨论论坛或教程。请使用tour 并花时间阅读minimal reproducible exampleHow to Ask 以及该页面上的其他链接。
  • 我已经下载了这些 csv 文件。
  • 你从哪里得到符号?它也包含在文件中还是文件名的一部分?

标签: python python-3.x pandas csv dictionary


【解决方案1】:

我没有像你这样的 CSV,但这是我想出的。如果您有我可以使用的 CSV,我会很乐意对其进行测试并进行改进。

至少它现在似乎可以与 AAPL.csv 一起使用。

更新版本:

import csv
market_data = {}
list_of_files = ['AAPL.csv']
for file in list_of_files:
        f = open(file, 'rt')
        reader = csv.reader(f)
        market_data[file] = {}
        flag = False
        headers = 0
        for row in reader:
                if (flag == False):
                        headers = row
                        for header in headers:
                                market_data[file][header] = []
                                flag = True
                else:
                        data = row
                        print(data)
                        for a, header in zip(data, headers):
                                market_data[file][header].append(a)

print(market_data)

【讨论】:

  • 我在执行“for row in reader”时出错,错误消息说列表没有属性拆分。另外,我确实有一个 csv,但我不知道如何发送给您。
  • 13mdg5@queensu.ca 是我的电子邮件。或者考虑使用justbeamit.com。如果 row 是一个列表,那么可能不需要该特定行。
  • 乐于助人。更多问题,请在此处发表评论。
  • @smci:你会怎么做呢?我的意思是问题不在于写入/读取数据,它已经在类似字典的结构中,而是以类似表的结构读取数据并将其读入字典。所以我认为它宁愿是df.to_dict,但这不会更新现有字典,而是为每个符号创建一个新字典,因此如果有多个文件包含相同符号的数据,它将不起作用。
【解决方案2】:

大致上,你可以这样做:

import pandas as pd
# enter your filenames in the list
# if they are in a particular directory
# you can also use os.listdir or something 
# like that to get the actual filenames
filenames= ['ibm.csv']
result_dict= dict()
for file in filenames:
    # load the csv in a dataframe
    df= pd.read_csv(file, sep=',')
    symbol= file.split('.')[0]
    symbol_dict= result_dict.setdefault(symbol, dict())
    # process the dataframe columnwise
    # turning each column into a key in the dict
    # and it's values into a list
    for col, ser in df.items():
        symbol_dict.setdefault(col, list()).extend(ser.to_list())

【讨论】:

  • 这个出于某种原因只存储了列表中最后一个文件的信息
  • 不客气。你可能看过symbol_dictresult_dict 包含所有文件的信息,我刚刚验证过。
  • 非常感谢,这确实有效,我的错!我之前检查过symbol_dict
  • 没问题。感谢您重新测试。
猜你喜欢
  • 2020-12-27
  • 2019-07-13
  • 1970-01-01
  • 2019-02-07
  • 2016-11-22
  • 2021-06-08
  • 2018-01-29
  • 2016-08-19
  • 2021-07-23
相关资源
最近更新 更多