簡體   English   中英

熊貓遍歷數據框的列以獲取自定義MySQL插入字符串

[英]Pandas iterate through columns in dataframe for custom MySQL insert string

我試圖將單個數據幀行中不同列的值合並為一個字符串,並以逗號分隔,以便我可以創建一個自定義SQL插入字符串以在MySQL數據庫上執行。 我有67個不同的列,並且我試圖防止編寫分別針對每個列的名稱的代碼,主要是為了最大程度地提高代碼在不同大小的數據幀中的可重用性。 我可能有1到2000行要遍歷,每行都有一個INSERT查詢。

例如,如果我的DataFrame包括以下內容:

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

我想為數據幀中的每一行創建一個字符串:INSERT INTO表名VALUES(20160321、121、3、67.5、43.8)INSERT INTO表名VALUES(20160322、87、5、73.1、53.2)INSERT INTO表名VALUES(20160323 ,90、2、71.1、51.7)插入表名VALUES(20160324、103、7、68.3、47.0)

我已經考慮過使用數據框的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)

由於rows不支持數字索引,因此出現錯誤。

換句話說,調用rows[1]是不正確的。 必須改為調用rows['column-name']

iterrows()不返回傳統列表-它返回整數和Series對象的生成器。 源頭開始 ,該函數的定義如下:

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; dr采取第一種方法。 這是在此特定Series對象中建立索引的正確方法。 考慮使用.format()代替它,使其真正具有Pythonic .format()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM