新人日记20200430 关于利用python读取SQLite3的心得感受

Noella ·
更新时间:2024-11-14
· 815 次阅读

今天本来想用之前做过的一个作业的数据试一下线性回归的代码,结果因为用Python读取SQLite3中数据的格式问题耽误了很长时间。
大致问题是:用pd.read.sql读取后生成的DataFrame中的数据有几个表现:
1.都是object
2.有空值 但是原始数据里并不是直接为空 而是‘NDA’,实际上就是一个字符串,而不是NaN或者None
3.数据中的数字数据也都是str形式而不是float。

因为‘NDA’没法转float所以直接用dtype=np.float的方法失效了
折腾了一番搞出了一个有一些麻烦的办法,思路大致为:

1.pd.read.sql读取sqlite3中的table
2.选取目标列,此处为2列,组成了一个dataframe
3.将2列分别变成列表list1&2
4.用for循环同时嵌套try except语句对list中数值进行float转换,若为NDA则直接append,分别将值加入list3&4
5.将list3&4组成新的dataframe
6.利用df.replace语句将所有的NDA替换为np.nan
7.之后由于python认识的“空值”已设置好,同时数值也都转为float就可以进行所需要的数学统计操作了。

import sqlite3 from sklearn.linear_model import LinearRegression import pandas as pd import numpy as np import seaborn as sns import matplotlib as plt conn=sqlite3.connect("xxxxxx.db") cur = conn.cursor() lm=LinearRegression() df=pd.read_sql('SELECT * FROM xxxxxx',conn) a=df[['Graduation_Rate','Teachers_Score']] print(a) list1=a['Graduation_Rate'].tolist() list2=a['Teachers_Score'].tolist() list3=list() list4=list() for ele1 in list1: try: list3.append(float(ele1)) except: list3.append(ele1) for ele2 in list2: try: list4.append(float(ele2)) except: list4.append(ele2) df=pd.DataFrame({'a':list3,"b":list4}) df.replace('NDA',np.nan,inplace = True) mean1=df['a'].mean() mean2=df['b'].mean() print(mean1) print(mean2) df['a'].replace(np.nan,mean1,inplace = True) df['b'].replace(np.nan,mean2,inplace = True) print(df) X=df[['a']] Y=df[['b']] lm.fit(X,Y) sns.regplot(x='a',y='b',data=df) print("Y=",float(lm.intercept_),"+",float(lm.coef_),"*X",sep="") Ebooor 原创文章 1获赞 0访问量 126 关注 私信 展开阅读全文
作者:Ebooor



用python sqlite3 SQLite Python

需要 登录 后方可回复, 如果你还没有账号请 注册新账号