我在csv的一列中有一个表列表,这些数据已作为数据帧读入到熊猫中,如下所示:
df = pd.read_csv('~/tablenames')
表名csv看起来像这样:
tablenames
table1
table2
创建与数据库的连接并遍历数据框的方式如下:
import pandas as pd
from sqlalchemy import create_engine
df = pd.read_csv('~/tablenames')
engine = create_engine('connection_string')
for index,row in df.iterrows():
df['column_count'] = pd.read_sql_query("select count(column_name) from information_schema.columns where table_name = '%s'"%row['table_name'],con=engine)
df['row_count'] = pd.read_sql_query("select count(*) from %s"%row['table_name'],con=engine)
以上循环仅获取第一个表数据,并且仅对数据帧中的第一个表执行查询。对于数据帧中其余表名没有执行查询的地方,我在做什么?
我没有收到任何错误消息。如果有帮助,我正在连接到postgres数据库。
编辑:
count
0 45
count
0 89
count
0 36
count
0 17
count
0 12
答案 0 :(得分:0)
将for循环更改为
#also here add .iloc[0]
for index,row in df.iterrows():
df.loc[index,'column_count'] = pd.read_sql_query("select count(column_name) from information_schema.columns where table_name = '%s'"%row['table_name'],con=engine).iloc[0]
df.loc[index,'row_count'] = pd.read_sql_query("select count(*) from %s"%row['table_name'],con=engine).iloc[0]
更新
for index,row in df.iterrows():
updatedf=pd.read_sql_query("select * from information_schema.columns where table_name = '%s'"%row['table_name'],con=engine)
df.loc[index,'column_count'] = updatedf.shape[1]
df.loc[index,'row_count'] = updatedf.shape[0]
答案 1 :(得分:-1)
尝试熊猫concat
import glob
import pandas as pd
# glob.glob('table*.csv') - returns List[str]
# for f in glob.glob() - returns a List[DataFrames]
df = pd.concat([pd.read_csv(f) for f in glob.glob('table*.csv')], ignore_index = True)