Python 熊猫遍历dataframe中的列以获取自定义MySQL插入字符串

Python 熊猫遍历dataframe中的列以获取自定义MySQL插入字符串,python,mysql,string,pandas,dataframe,Python,Mysql,String,Pandas,Dataframe,我试图将单个数据帧行中不同列的值组合成一个字符串,用逗号分隔,这样我就可以创建一个自定义SQL插入字符串,在MySQL数据库上执行。我有67个不同的列,我试图阻止编写单独处理每个列名称的代码,主要是为了最大限度地提高代码对不同大小数据帧的重用性。我可能需要迭代1到2000行,每行都有一个INSERT查询 例如,如果我的数据帧包括以下内容: RecDate WindDir WindSpeed OutdoorTemperature OutdoorHum

我试图将单个数据帧行中不同列的值组合成一个字符串,用逗号分隔,这样我就可以创建一个自定义SQL插入字符串,在MySQL数据库上执行。我有67个不同的列,我试图阻止编写单独处理每个列名称的代码,主要是为了最大限度地提高代码对不同大小数据帧的重用性。我可能需要迭代1到2000行,每行都有一个INSERT查询

例如,如果我的数据帧包括以下内容:

RecDate       WindDir       WindSpeed       OutdoorTemperature       OutdoorHumidity
20160321      121           3               67.5                     43.8
20160322      87            5               73.1                     53.2
20160323      90            2               71.1                     51.7
20160324      103           7               68.3                     47.0
我想为数据框中的每一行创建一个字符串: 插入到tablename值中(20160321、121、3、67.5、43.8) 插入到tablename值中(20160322、87、5、73.1、53.2) 插入tablename值(20160323,90,2,71.1,51.7) 插入到tablename值中(20160324、103、7、68.3、47.0)

我曾考虑过使用dataframe的to_sql()函数,但未能使代码与我的数据库结构配合使用

因此,我的目标是对每一行进行排列,并手动在括号中创建字符串,用逗号分隔:

for index, row in df.iterrows():
   print('INSERT INTO tablename VALUES (%s, %s, %s, %s, %s)' % (row['RecDate'], row['WindDir'], row['WindSpeed'], row['OutdoorTemperature'], row['OutdoorHumidity']))
为了使我的代码“pythonic”而不是那么死板,我尝试对每一行进行迭代,在每一列索引之间添加一个逗号:

for index, row in df.iterrows():
    string = ''

    for x in range(len(row)):
        string += '%s, ' % row[x]

    print('INSERT INTO tablename VALUES (%s)' % string)
我经常会在上面的代码中遇到索引错误和越界错误,但我并不确定正确的路径是什么。我希望您能检查一下我的代码和思考过程,并就如何改进代码提出建议。我的目标是尽可能地提高效率,尽量减少我必须编写的代码量(特别是当有67列时!),但仍然使代码灵活地用于各种用途,特别是当列数发生变化时

谢谢大家!

请尝试下面的代码

def cq_processor(x):
    return 'INSERT INTO tablename VALUES ({})'.format(', '.join(x.tolist()))

df.apply(cq_processor, axis=1)

您将收到错误,因为
不支持数字索引。

换句话说,调用
行[1]
是不正确的。您必须调用
行['column-name']

iterrows()
不返回传统列表-它返回一个整数生成器和一个
序列
对象。从中,函数定义如下:

columns = self.columns
for k, v in zip(self.index, self.values):
    s = Series(v, index=columns, name=k)
    yield k, s
如果您知道您的
pandas
,您将看到
index=columns
位告诉序列只接受列名作为有效索引。未指定此参数时,
Series
默认为允许基于整数的索引


tl;博士,做你的第一个方法。这是索引此特定
系列
对象的正确方法。考虑使用<代码> .FrasATE()>代码>,以使其更为PythOng.< /P>代码工作。非常感谢。我想知道是否有可能不包括67组{}和对每个列名的引用?也许可以通过某种方式循环列号,在该列中添加逗号和值,直到到达dataframe行的末尾?@AllenH更新了我的解决方案。请检查并试用。