繁体   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