【问题标题】:Writing dictionary of dataframes to a single file将数据帧字典写入单个文件
【发布时间】:2019-07-27 02:51:51
【问题描述】:

试图捕捉多年每日更新的二维表格。我可以将它们下载到数据框字典中。尝试将其写入 CSV 文件,因此我不必每次都下载它。

import csv
import pandas as pd 

def saver(dictex):
    for key, val in dictex.items():
        val.to_csv("data_{}.csv".format(str(key)))

    with open("keys.txt", "w") as f: #saving keys to file
        f.write(str(list(dictex.keys()))

def loader():
    """Reading data from keys"""
    with open("keys.txt", "r") as f:
        keys = eval(f.read())
    dictex = {}    
    for key in keys:
        dictex[key] = pd.read_csv("data_{}.csv".format(str(key)))

    return dictex

dictex = loader()

它可以将所有的键和值保存在不同的文件中。我的下一步是将所有数据放在一个文件中。

我尝试了以下方法,但它似乎只适用于一维字典。因为它无法读取以下错误消息。

"ValueError: 字典更新序列元素 #1 的长度为 0;需要 2"

with open('datadict.csv', 'w', encoding='utf-8-sig') as csv_file:
    writer = csv.writer(csv_file)
    for key, value in data.items():
        writer.writerow([key, value])
with open('datadict.csv', encoding='utf-8-sig') as csv_file:
    reader = csv.reader(csv_file)
    mydict = dict(reader)

这是一个类似于我正在使用的手工制作的数据集。我想将 dictdf 写入 csv 并以相同的结构读回。

import pandas as pd
import numpy as np
dates = pd.date_range('1/1/2000', periods=8)
df1 = pd.DataFrame(np.random.randn(8, 4),
index=dates, columns=['A', 'B', 'C', 'D'])

dates2 = pd.date_range('1/1/2000', periods=8)
df2 = pd.DataFrame(np.random.randn(8, 4),
index=dates, columns=['A', 'B', 'C', 'D'])

dictdf={}
dictdf['xxset']=df1
dictdf['yyset']=df2

感谢您的关注。

【问题讨论】:

  • 你希望所有的 csv 都加入到 1 个大数据框中吗?所有 csv 的结构(# 和列名)是否相同?
  • 不,不是大数据框,如果可能的话,我想将它们放入大数据框字典中。它们的名称和列是相同的。在我写入数据之前,它在 data[date] 中看起来不错。
  • 您的代码中的data[date] 是什么?我没有看到任何 data 对象。
  • 该值是每天使用日期作为键的 957x16 数据帧。我正在尝试使用两天的数据来测试它。
  • 那么data 与上面代码中的dictex 变量相同吗?

标签: python csv dataframe dictionary


【解决方案1】:

我不知道您的 keys.txt 或 csv 的确切结构是什么,但根据您的代码,我怀疑这样的事情会将所有 csv 加入一个 DataFrame。

import pandas as pd

"""Reading data from keys"""
with open("keys.txt", "r") as f:
    keys = eval(f.read())
list_of_dfs = []

# Read in all csv files and append to list
for key in keys:
    list_of_dfs.append(pd.read_csv("data_{}.csv".format(str(key)))) # based on your example

# Join all dataframes into 1 big one
big_df = pd.concat(list_of_dfs)

编辑

如果您想将字典 with 数据帧保存到 1 个文件,将其保存为 pickle 文件可能是更好的选择。 见this question

【讨论】:

  • 目的是将数据帧字典放入 CSV 文件中。我想用相同的数据结构读回它,以便稍后继续操作。我添加了一个样本数据集进行测试。
  • 所以您想将字典中的数据从数据帧写入 1 个 csv 文件?这是不可能的。以数据框为值的字典与 csv 文件的 2D 格式不匹配。如果您真的想将字典格式与底层数据框保持一致,将其保存为 pickle 文件可能是更好的方法。
  • 谢谢。将其另存为 pickle 文件是一种替代方法。
猜你喜欢
  • 2018-11-20
  • 2019-01-16
  • 2018-02-27
  • 2018-03-01
  • 1970-01-01
  • 2021-11-17
  • 2021-09-06
  • 2019-02-11
  • 1970-01-01
相关资源
最近更新 更多