【发布时间】:2015-11-07 06:30:00
【问题描述】:
已解决 - 请参阅底部的最终编辑。
我有一个如下所示的 DataFrame:
df_transpose=
Time Date Morning (5AM-9AM) Day (9AM-6PM) \
Area
D1_NY_1 01_05_2012 0.000000 0.000000
D2_NY_2 01_05_2012 0.000000 0.000000
D3_NJ_1 01_05_2012 1.000000 0.966667
...
我想使用 SQLite 将这个逐行写入数据库中的不同表。我已经设置了数据库Data.db,其中包含每个区域的单独表 - 即表名称包含上面数据框中列出的区域名称(例如“Table_D1-NY-1”等)。我想测试上面DataFrame中的Area(索引)和我的数据库中的表的名称之间是否匹配,如果匹配,则将DataFrame的整个相关行写入包含相同Area的表中在名字里。这是我到目前为止所写的内容,以及我得到的错误:
代码:
ii=0
for ii in range(0,row_count):
df_area= df_transpose.index[ii]
export_data= df_transpose.iloc[ii]
cur.execute("SELECT name FROM sqlite_master WHERE type='table'")
available_tables=(cur.fetchall())
for iii in range (0, row_count):
if re.match('\w*'+df_area, available_tables[iii]):
relevant_table=available_tables[iii]
export_data.to_sql(name=relevant_table, con=con, if_exists=append)
iii=iii+1
错误:对于“if re.match...”行:
TypeError: expected string or buffer
在搜索问题的解决方案后,我尝试进行第二个 (iii) 循环,以避免将列表对象 (available_tables)(而不是字符串)输入到 re.match()。我仍然得到同样的错误。谁能看到我的错误或帮助我修复我的代码?
编辑:
有关信息,df_area 和 available_tables 输出以下内容:
df_area=
u'D1_NY_1
available_tables=
[(u'US_D1_NY_1',), (u'US_D2_NY_2',), (u'US_D3_NJ_1',), ...]
编辑:
还没有弄清楚这一点,希望能提供意见。我尝试使用我的代码,但错误仍然存在。
最终编辑:
以为我会发布我是如何过去的。问题是在available_tables 之前是元组列表,而不是字符串列表。要让 re.match() 测试工作available_tables 必须是一个字符串列表。我使用以下命令进行了更改:
cur.execute("SELECT name FROM sqlite_master WHERE type='table'")
available_tables=[item[0] for item in cur.fetchall()]
【问题讨论】:
标签: python regex database sqlite dataframe