我希望使用基于Pandas DataFrame中列数的循环在Python 2.7中自动生成以下字符串:
INSERT INTO table_name (firstname, lastname) VALUES (534737, 100.115)
这假设DataFrame有2列。
这就是我所拥有的:
# Generate test numbers for table:
df = pd.DataFrame(np.random.rand(5,2), columns=['firstname','lastname'])
# Create list of tuples from numbers in each row of DataFrame:
list_of_tuples = [tuple(x) for x in df.values]
现在,我创建了一个字符串: 手动 - 这有效:
add_SQL = INSERT INTO table_name (firstname, lastname) VALUES %s" % (list_of_tuples[4])
在此示例中,我仅使用了两个列名称 - 'firstname'
和'lastname'
。但我必须循环这个,因为我有156个列名 - 我不能手动执行此操作。
我需要什么:
%s
作为Pandas DataFrame中列数的次数。
在这里,DataFrame有2列,所以我需要一种自动方式
生成%s
两次。''
。我的尝试:
sss = ['%s' for x in range(0,len(list(df)))]
add_SQL = "INSERT INTO table_name (" + sss + ") VALUES %s" % (len(df), list_of_tuples[4])
但这不起作用。
我有办法自动生成这个字符串吗?
答案 0 :(得分:0)
这是我想出的 - 它是基于dwanderson在原帖(问题)的第2条评论中的方法:
table_name = name_a #name of table
# Loop through all columns of dataframe and generate one string per column:
cols_n = df.columns.tolist()
placeholder = ",".join(["%s"]*df.shape[1]) #df.shape[1] gives # of columns
column_names = ",".join(cols_n)
insrt = "INSERT INTO %s " % table_name
for qrt in range(0,df.shape[0]):
add_SQL_a_1 = insrt + "(" + column_names + ") VALUES (" + placeholder + ")" #part 1/2
add_SQL_a_2 = add_SQL_a_1 % list_of_tuples[qrt] #part 2/2
这样,最终字符串在第2/2部分。
出于某种原因,它不会让我在一行中完成这一切,我无法弄清楚原因。