已决议 - 在底部看到最终编辑。
我有一个看起来如下的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
,其中包含每个区域的单独表格 - 即表格名称包含上面DataFrame中列出的区域名称(例如“Table_D1-NY-1”等)。我想测试上面的DataFrame中的Area(索引)和我的数据库中的表的名称是否匹配,如果匹配,则将DataFrame的整个相关行写入包含相同Area的Table在名字里。这是我到目前为止所写的内容,以及我得到的错误:
CODE:
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()]
答案 0 :(得分:0)
无法发表评论,但可能会尝试使用r'\w*'
代替'\w'
,因为您正在使用反斜杠。
此外,从您给出的输出看来available_tables
是一个元组列表。所以你可能想要使用:
re.match(r'\w*'+df_area, available_tables[iii][0])