将 CSV 数据框添加到按名称分隔的字典中

Posted

技术标签:

【中文标题】将 CSV 数据框添加到按名称分隔的字典中【英文标题】:add a CSV dataframe to a dictionary separating by name 【发布时间】:2022-01-03 16:41:20 【问题描述】:

所以我正在做一个时间序列/LSTM 作业,我有一个股票数据集:https://www.kaggle.com/camnugent/sandp500

在数据集中,大约有 500 家公司,每个公司都有一组行,我想要将公司添加到字典中并将键设置为每个公司的名称。

这是我目前拥有的:

dataframe = pd.read_csv('all_stocks_5yr.csv', parse_dates=['date'])
dataframe['date'] = pd.to_datetime(dataframe['date'])

grouped_df = dataframe.groupby('Name')

for i in grouped_df:
    df_dict = grouped_df[i].to_dict

【问题讨论】:

那么问题出在哪里? 当我运行单元格时,我得到:'DataFrame' 对象是可变的,因此它们不能被散列 要可视化字典我应该创建一个变量并将 dataframe.set_index('Name').T.to_dict('dict') 放入其中?你知道我如何打印一个特定的公司及其字典中的列吗? @A.Najafi 查看数据集后,我发现每个公司都有多条记录。那么,你想如何处理它们呢? 我要输入每家公司和字典中的所有记录,设置名称为键。然后我想只选择结束列并设置一个滚动窗口,以执行 Kmeans 方法并为每个公司创建该列的时间序列,我希望我解释清楚,谢谢@A.Najafi 【参考方案1】:

这将解决您的问题:

gp = dataframe.groupby("Name")
my_dict =  # This is the output you want
for record in gp: # record is a tuple containing the elements of a row
    if record[0] in my_dict: # record[0] will give the name of the company
        my_dict[record[0]].append(record)
    else:
        my_dict[record[0]] = [record]

print(my_dict)

处理这个问题的另一种方法是遍历数据框:

my_dict = 
for index, record in dataframe.iterrows():
    if record['Name'] in my_dict:
        my_dict[record['Name']].append(record)
    else:
        my_dict[record['Name']] = [record]

print(my_dict)

【讨论】:

是否有键设置为名称?我假设数据框是按名称分组的,这也是关键,不是吗? 当您根据 Name 对数据框进行分组时,您可以使用 apply 方法对其应用函数。 TBH,没有必要做 groupby,但不管它工作 :) 是的!我现在看到每批的关键是每家公司的名称。最后一件事(我是新手,对不起XD)。您知道如何从每个公司批次中选择一列(结束列)以稍后执行时间序列练习吗? 您可以遍历my_dict,对于每家公司,您可以根据需要找到它。如果我的回答解决了您的问题,请接受它作为答案。总帐

以上是关于将 CSV 数据框添加到按名称分隔的字典中的主要内容,如果未能解决你的问题,请参考以下文章

将数据框保存到按名称寻址的文件中

如何将新列添加到按 groupby 分组的分层数据框中

按名称从字典中提取数据框

postgres和h2 db中名称中的#字符问题

修剪 PySpark 中名称之间的额外空格

我将文件名添加到数据框中,但它只添加了相同的名称