0
팬더의 SQL 테이블을 설명하는 메소드를 사용하고 싶지만 모든 데이터를 메모리로 가져올 수 없습니다 - SQL 쿼리 만 사용하여 정보를 얻을 수 있습니까? 내가하지 어떤 식 으로든() df.describe로 편리 알고 있지만 당신이 원하는 모든 정보를 얻을 수있는 SQL 명령문이있는까지로,이팬더 - DB의 테이블을 기술하십시오 - 큰 데이터
감사
팬더의 SQL 테이블을 설명하는 메소드를 사용하고 싶지만 모든 데이터를 메모리로 가져올 수 없습니다 - SQL 쿼리 만 사용하여 정보를 얻을 수 있습니까? 내가하지 어떤 식 으로든() df.describe로 편리 알고 있지만 당신이 원하는 모든 정보를 얻을 수있는 SQL 명령문이있는까지로,이팬더 - DB의 테이블을 기술하십시오 - 큰 데이터
감사
.
다음은 모든 열과 해당 데이터 형식을 반환하는 SQL Server의 저장 프로 시저를 사용하고 있습니다. float 유형에 대한 모든 열 이름을 가져온 다음 루프를 통해 새 쿼리를 작성합니다.
그런 다음 모든 것을 최종 데이터 프레임에 넣습니다. 90 백분위 수만 포함되었지만 더 추가하는 법을 배울 수 있다고 생각합니다. float보다 더 많은 데이터 유형을 추가하려고합니다.
이 솔루션은보기 흉하고 느리지 만 모든 데이터를 메모리에서 가져 오지 못하면서 효과적입니다.
import pyodbc
import pandas as pd
def sql2df(sql, connection):
df = pd.read_sql(sql=sql, con=connection)
return df
cnx = pyodbc.connect(r'DRIVER={SQL Server};SERVER=.\SQLEXPRESS;DATABASE=TEST;Trusted_Connection=yes;')
df_columns = sql2df('exec sp_columns test_table', cnx)[['COLUMN_NAME', 'TYPE_NAME']]
numeric_columns = []
for index, row in df_columns.iterrows():
if row[1] == 'float': #or int or any numeric
numeric_columns.append(row[0])
final_df = pd.DataFrame(index=(['stdev', 'count', '90%', 'mean']))
for col in numeric_columns:
standard_dev = sql2df('SELECT STDEV('+col+') FROM dbo.test_table', cnx)\
.get_value(0,0, takeable=True)
cnt = sql2df('SELECT COUNT(' + col + ') FROM dbo.test_table', cnx)\
.get_value(0,0, takeable=True)
# percentile is 100-N so top 10 means 90 percentile
ninety_percentile = sql2df('SELECT Min(subq.' + col + ') FROM(SELECT TOP 10 PERCENT ' + col +
' FROM dbo.test_table ORDER BY ' + col + ' DESC) AS subq', cnx)\
.get_value(0,0, takeable=True)
mean = sql2df('SELECT AVG(' + col + ') FROM dbo.test_table', cnx)\
.get_value(0,0, takeable=True)
final_df[str(col)] = [standard_dev, cnt, ninety_percentile, mean]
print final_df
cnx.close()