我有以下从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
参数应该是数据库的SQLAlchemy
或pyscopg2
(或其他)连接。看一下documentation。