2015-10-22 61 views
0

我使用SQLAlchemy從MSSQL數據庫中查詢數據,然後保存爲帶有熊貓的excel文件。我正在尋找類似於T-SQL的RTRIM的東西,以便從我的數據中刪除任何尾隨的空白。刪除SQLAlchemy或Pandas中的空格

我知道如何從列標題中刪除空格,但不能從數據本身中刪除。所以我要麼在查詢時或者在熊貓數據框中刪除空白字符,但對於如何解析(因爲大多數搜索在解析時如何刪除空白區域,而不是寫入數據)我沒有任何想法。

到目前爲止我的代碼是:

from sqlalchemy.ext.declarative import declarative_base 
from sqlalchemy.orm import scoped_session,sessionmaker 
from sqlalchemy import (Column, Integer, String, Boolean, ForeignKey, DateTime, Sequence, Float) 
from sqlalchemy import create_engine 
import pandas as pd 
import openpyxl 


pd.core.format.header_style = None 
pd.core.format.number_format = None 

def data_frame(query, columns): 
    def make_row(x): 
     return dict([(c, getattr(x, c)) for c in columns]) 
    return pd.DataFrame([make_row(x) for x in query]) 

engine = create_engine('mssql+pyodbc://u:[email protected]/MYDBt?driver=SQL Server', echo=False) 
Session = sessionmaker(bind=engine) 
session = Session() 
Base = declarative_base() 

class Tranv(Base): 
    __tablename__ = "Transactions" 

    part_number = Column(String(20), primary_key=True) 
    time_stamp = Column(String(20)) 
    employee_number = Column(String(6)) 
    action = Column(String(20)) 

newvarv = session.query(Tranv).filter_by(employee_number='001841').filter_by(time_stamp='2015-10-01 10:49:53.230') 

dfx = data_frame(newvarv, [c.name for c in Tranv.__table__.columns]) 
dfx.columns = dfx.columns.str.strip() 
dfx = dfx.rename(columns=lambda x: x.strip()) 

writer = pd.ExcelWriter('C:\\Users\\grice\\Desktop\\Auto_Scrap_Report\\testy.xlsx') 
writer.date_format = None 
writer.datetime_format = None 

dfx.to_excel(writer, sheet_name='Sheet1', index=False) 
writer.save() 
+3

要刪除的列中的所有條目結尾的空白做' df [] = df [] .str.strip()'您可以使用'str'屬性以矢量化方式訪問一組字符串方法,這些方法以向量化方式處理列。 – JoeCondron

回答

1

好有posibly一個更優雅的方式,但對我來說這一個工作:

In [2]: 

df = pd.DataFrame(data={"names": ["John ", "Jack"], "surnames": ["Andrews", " McAllister"]}) 

In [3]: 

df 

Out[3]: 
    names surnames 
0 John Andrews 
1 Jack McAllister 

2 rows × 2 columns 
In [9]: 

df = df.apply(lambda x: x.str.strip()) 

In [10]: 

df.loc[0, "names"] 

Out[10]: 

'John' 
+0

我添加了,但我得到了以下錯誤:AttributeError :('只能使用.str訪問器與字符串值,它使用pandas中的np.object_ dtype',發生在ind ex time_stamp') – grlaer

+0

然後按照配方中的對您的問題發表評論,並在要刪除的列上輸入 –

+0

您是對的;我一直在努力工作太久。謝謝 – grlaer