我有以下从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并使用这些文件来构建数据库会更好吗?

最佳答案

您的dict_已经包含DataFrames,您需要遍历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

10-08 08:28
查看更多