#python #pandas #pandasql
#python #pandas #pandasql
Вопрос:
В Python, используя pandasql: запрос возвращает «Пустой фрейм данных»
import pandas as pd
import sqlite3 as db
import pandasql
dataSet = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.data",header=None)
type(dataSet)
dataSet.columns = ['age', 'workclass','fnlwgt','education','education_num','marital_status','occupation','relationship'
,'race','sex','capital_gain','capital_loss','hours_per_week','native_country','salary']
dataSet.head()
from pandasql import sqldf
q1 = "select distinct sex from dataSet where sex='Male';"
pysqldf = lambda q: sqldf(q, globals())
print(pysqldf(q1))
Комментарии:
1. пожалуйста, переформатируйте исходный код, он нечитаем
Ответ №1:
Для этого набора данных я проверил фактические данные и обнаружил пробелы в столбцах.
Итак, сначала нам нужно выполнить очистку данных, затем мы можем выполнить преобразование над ними.
Для очистки нам нужно обрезать пробелы. для этой цели я написал функцию trim_all_the_columns
, которая удалит все пробелы
Код для вышеупомянутого набора данных
#!/usr/bin/env python
# coding: utf-8
#import required packages
import pandas as pd
import sqlite3 as db
import pandasql as ps
from pandasql import sqldf
#give the path location from where data is loaded, in your case give "https://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.data"
inputpath=r'C:UsersZ0040B9KDesktopSIGShowcaseadult.data.txt'
#Trim whitespace from ends of each value across all series in dataframe
def trim_all_the_columns(df):
trim_strings = lambda x: x.strip() if type(x) is str else x
return df.applymap(trim_strings)
#creating dataframe
dataSet = pd.read_csv(inputpath,header=None)
#calling trim function over the dataframe to remove all whitespaces
dataSet = trim_all_the_columns(dataSet)
type(dataSet)
dataSet.columns = ['age', 'workclass','fnlwgt','education','education_num','marital_status','occupation','relationship' ,'race','sex','capital_gain','capital_loss','hours_per_week','native_country','salary']
#sql query
q1 = "select distinct sex from dataSet where sex='Male';"
#this will return distinct result of **Male** column and that will be 0
# If you add any other column like **age** or something else you will get result
#q1 = "select distinct age,sex from dataSet where sex='Male';"
pysqldf = lambda q: sqldf(q, globals())
#print result
print(pysqldf(q1))
#this also can be use to print result
print(ps.sqldf(q1, locals()))
Найдите результирующий вывод: для запроса
q1 = "select distinct age, sex from dataSet where sex='Male';"
Найдите результат вывода для запроса
q1 = "select distinct sex from dataSet where sex='Male';"