将数据帧字典写入单个文件

时间:2019-03-05 15:25:32

标签: python csv dataframe dictionary

试图捕获多年的每日更新的二维表。我可以将它们下载到数据框字典中。尝试将其写入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()

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

我尝试了以下方法,但它似乎仅适用于1d词典。因为它无法读取以下错误消息。

“ 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

感谢您的关注。

1 个答案:

答案 0 :(得分:0)

我不知道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)

编辑

如果要将字典与数据帧一起使用保存到一个文件中,则将其另存为泡菜文件可能是一个更好的选择。 参见this question