簡體   English   中英

在 Pandas 中的 a.csv 文件中刪除 DataFrame 的索引列

[英]Dropping the index column from DataFrame in a .csv file in Pandas

我這里有一個 python 腳本:

import pyodbc
import pandas as pd
from sqlalchemy import create_engine 
import csv

df = pd.read_sql("""script_generator""", conn)

for count, row in df.iterrows():
    row.to_csv('generatedfile{}.sql'.format(count), index=False, index_label=False, quoting=csv.QUOTE_NONE, escapechar=' ')

當我運行它時,它會創建單獨的 csv 文件,這些文件的格式為 sql。output 在 generatedfile2 中看起來像這樣:

2
IF    EXISTS  (SELECT  *  FROM  sys.objects  WHERE  object_id  =  OBJECT_ID(N'table1')  AND  type  in  (N'U')) 
 
BEGIN 
 
        PRINT  'DROPPING  TABLE  [dbo].[table1]....' 
 
        DROP  TABLE  [dbo].[table1];   
 
END;   

文件的 rest 具有相同的格式。 有什么辦法可以更改我的代碼以擺脫代碼開頭的“2”嗎? 因此它無法在 SQL 中正常運行。 出於某種原因 index_label=False 不會擺脫它。 非常感謝!

運行DataFrame.iterrows時, row呈現為 Pandas 系列而不是數據框。 所以實際上,您正在運行Series.to_csv

for count, row in df.iterrows():
    print(type(row))

# <class 'pandas.core.series.Series'>
# <class 'pandas.core.series.Series'>
# <class 'pandas.core.series.Series'>
...

但是,此方法不適用於迭代單個列。 相反,考慮直接在列的值上循環(假設完全是您的 SQL 語句)。 在每次迭代中,使用典型的open + write方法創建相應的 csv 文件。 使用enumerate對文件后綴進行順序編號。

for count, val in enumerate(df['sql_string_column']):
    with open('generatedfile{}.sql'.format(count), 'w') as f:
        f.write(val)

暫無
暫無

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

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