Python:数据帧到DB

时间:2017-07-14 14:37:19

标签: python sqlite pandas

我有以下从excel文件文件夹创建的数据框字典:

import os
import glob
import pandas as pd

files = glob.glob(os.path.join("staging" + "/*.csv"))

print(files)

# Create an empty dictionary to hold the dataframes from csvs
dict_ = {}

# Write the files into the dictionary
for file in files:
    dict_[file] = pd.read_csv(file, header = 0, dtype = str, encoding = 'cp1252').fillna('')

"""
Rewrite the dataframes to csv in utf8, overwriting old values 

for file in dict_:
    dict_[file].to_csv(file, encoding = 'utf-8')
"""

我现在如何将每个数据帧转换为sqlite数据库中的单独表?我尝试使用以下内容:

for file in files:
    pd.DataFrame(dict_[file].to_sql(file, conn, flavor = None,
                schema = None, if_exists = 'replace',index = True,
                index_label = None, chunksize = None, dtype = None))

但是,此代码会生成错误:要解压缩的值太多 用UTF-8重写CSV并使用这些文件构建数据库会更好吗?

1 个答案:

答案 0 :(得分:0)

您的dict_已包含DataFrame,您需要迭代dict_值:

for df in dict_.values():
    df.to_sql(...)

如果您想将密钥用作表格的名称,可以尝试以下方法:

for key, df in dict_.items(): df.to_sql(key, conn, flavor = None, schema = None, if_exists = 'replace', index = True, index_label = None, chunksize = None, dtype = None)

此外,to_sql方法的第一个参数应该是您要插入数据的表的名称。它应该是str。我不认为这就是你现在所拥有的。 con参数应该是SQLAlchemypyscopg2(或其他)与您的数据库的连接。

查看documentation