今天本来想用之前做过的一个作业的数据试一下线性回归的代码,结果因为用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 在Python编程中,SQLite3是一种轻量级的数据库,它非常适合小型项目或作为学习数据库管理的基础。当使用Python处理SQLite3数据库时,我们通常会使用pandas库来方便地读取和操作数据。然而,从SQLite3数据库读取数据到DataFrame时,可能会遇到一些格式问题,比如数据类型不匹配、空值处理以及特定字符串与缺失值的混淆。本文将深入探讨这些挑战以及如何解决它们。 `pd.read_sql`函数用于从SQL查询结果创建DataFrame。在上述案例中,读取的数据所有列都被识别为object类型,这是因为在默认情况下,pandas尝试保留原始数据的完整性,因此字符串、整数和浮点数都存储为对象。为了将数据转换为正确的类型,我们需要对每列进行单独处理。 针对描述中的问题2,数据中的空值(NDA)被错误地表示为字符串'NDA',而非NaN或None,这可能导致后续的转换失败。在处理这种情况时,我们需要先识别并替换这些特殊值。在上述代码中,作者使用了一个for循环和try-except语句来检查每一项,如果转换失败(即值为'NDA'),则保持原样;如果可以转换为浮点数,则进行转换。之后,使用`df.replace`方法将所有'NDA'替换为NaN,这样pandas就能正确识别它们为空值。 问题3涉及到的是数据中的数字列被识别为字符串而不是浮点数。为了解决这个问题,我们可以先尝试将字符串转换为浮点数。如果转换成功,数据就变成了浮点数;如果转换失败(例如,因为值为'NDA'),则将该值保留在原位。在处理完所有数据后,再将NaN替换为每个列的平均值,以便进行进一步的数学计算。例如,计算每列的均值,然后用这个均值替换所有NaN。 在上述代码中,作者使用了以下步骤: 1. 通过`pd.read_sql`读取SQLite3的表。 2. 选取目标列(如'Graduation_Rate'和'Teachers_Score')组成新的DataFrame。 3. 将这两列转换为列表。 4. 使用for循环和try-except语句尝试将列表中的元素转换为浮点数,如果失败则保持原样。 5. 创建新的DataFrame并将转换后的列表作为数据。 6. 用`df.replace`将所有'NDA'替换为NaN。 7. 计算每列的均值,并用均值替换NaN。 8. 使用`seaborn`库绘制回归图,展示数据之间的关系。 处理从SQLite3数据库导入到pandas DataFrame时遇到的问题,关键在于识别数据的特性,如数据类型和缺失值表示,然后采取适当的方法进行转换和清理。在本例中,通过手动处理转换和异常处理,作者成功地解决了这些问题,使得数据可以用于后续的线性回归分析。在实际应用中,根据数据的具体情况,可能还需要进行更多的数据清洗和预处理步骤。
- 粉丝: 7
- 资源: 902
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助