2003031122-钱柯蓉-Python数据分析第七周作业-MySQL
| 项目 | 内容 |
| 课程班级地址链接 | 20级数据班(本) |
| 作业要求链接 | 第七周作业 |
| 博客名称 | 2003031122-钱柯蓉-Python数据分析第七周作业-MySQL |
| 要求 | 每道题要有题目,代码,截图(只截运行结果) |
作业:
1.安装好MySQL,连接上Navicat。
2.完成课本练习(代码4-1~3/4-9~31)。
4-1 SQLAlchemy连接MySQL数据库的代码
from sqlalchemy import create_engine engine=create_engine("mysql+pymysql://root:root@127.0.0.1:3306/testdb?charset=utf8") print(engine)
运行结果

4-2 使用read_sql_table、read_sql_query、read_sql函数读取数据库数据代码
import pandas as pd #使用read_sql_query查看testdb中的数据表数目 formlist=pd.read_sql_query('show tables',con = engine) print('testdb数据库表数据清单为:','\n',formlist) #使用read_sql_table读取订单详情表 detail1=pd.read_sql_table('meal_order_detail1',con=engine) print('使用read_sql_table读取订单详情表的长度为:',len(detail1)) # 使用read_sql读取订单详情表 detail2 = pd.read_sql('select*from meal_order_detail2', con=engine) print('使用read_sql函数+SQL语句读取的订单详情表的长度为:', len(detail2)) detail3 = detail3 = pd.read_sql('meal_order_detail3', con=engine) print('使用read_sql函数+表格名称读取的订单详情表的长度为:', len(detail3))
运行结果

4-3 使用to_sql方法写入数据代码
#使用to_sql存储orderData detail1.to_sql('test1', con=engine, index=False, if_exists='replace') #使用read_sal读取test表 formlist1 = pd.read_sql_query('show tables', con=engine) print('新增一个表格后,testdb数据库数据表清单为:', '\n', formlist1)
运行结果

4-9 读取订单详情表代码
#导入SQLAlchemy库的create_engine函数 from sqlalchemy import create_engine import pandas as pd #创建一个MySQL连接器,用户名为root,密码为root #地址为127.0.0.1,数据库名称为testdb engine = create_engine('mysql+pymysql://root:root@127.0.0.1:3306/testdb?charset=utf8') #使用read_sql_table读取订单详情表 order1 = pd.read_sql_table('meal_order_detail1', con=engine) print('订单详情表一的长度为:', len(order1)) order2 = pd.read_sql_table('meal_order_detail2', con=engine) print('订单详情表二的长度为:', len(order2)) order3 = pd.read_sql_table('meal_order_detail3', con=engine) print('订单详情表三的长度为:', len(order3))
运行结果

4-10 读取订单信息表代码
from sqlalchemy import create_engine engine=create_engine("mysql+pymysql://root:root@127.0.0.1:3306/testdb?charset=utf8") import pandas as pd
orderInfo = pd.read_table('C:/Users/ASUS/Desktop/新建文件夹/meal_order_info.csv', sep=',', encoding='utf-8') print('订单信息表长度为:', len(orderInfo))
运行结果

4-11 读取客户信息表代码
# 读取users.xlsx文件 from sqlalchemy import create_engine import pandas as pd userInfo = pd.read_excel('C:/Users/ASUS/Desktop/新建文件夹/users.xlsx') print('客户信息表长度为:', len(userInfo))
运行结果

4-12 订单详情表的4个基本属性代码
#订单详情表的四个基本属性 from sqlalchemy import create_engine import pandas as pd # 创建数据库连接 engine = create_engine('mysql+pymysql://root:root@127.0.0.1:3306/testdb?charset=utf8') detail = pd.read_sql_table('meal_order_detail1', con=engine) print('订单详情表的索引为:', detail.index) print('订单详情表的所有值为:', '\n', detail.values) print('订单详情表的列名为:', '\n', detail.columns) print('订单详情表的数据类型为:\n', detail.dtypes)
运行结果


4-13到4-31代码
# 4-13 size、ndim、shape属性的使用 from sqlalchemy import create_engine import pandas as pd # 创建数据库连接 engine = create_engine('mysql+pymysql://root:root@127.0.0.1:3306/testdb?charset=utf8') detail = pd.read_sql_table('meal_order_detail1', con=engine) # 查看dataframe的元素个数 print('订单详情表的元素个数为:', detail.size) # 查看dataframe的维度数 print('订单详情表的元素个数为:', detail.ndim) # 查看dataframe的形状 print('订单详情表的元素个数为:', detail.shape) print('订单详情表转置前形状为:', detail.shape) print('订单详情表转置后形状为:', detail.T.shape) # 取出某一列 order_id = detail['order_id'] print('订单详情表中的order_id的形状为:', '\n', order_id.shape) # 4-16 使用访问属性的方式访问orderInfo中的菜品名称列 dishes_name = detail.dishes_name print('订单详情表中的dishes_name的形状为:', '\n', dishes_name.shape) # 4-17 dataframe单列多行数据获取 dishes_name5 = detail['dishes_name'][:5] print('订单详情表中的dishes_name前5个元素为:', '\n', dishes_name5) # 4-18 访问dataframe多列的多行数据 orderDish = detail[['order_id', 'dishes_name']][:5] print('订单详情表中的order_id和dishesname前5个元素为:', '\n', orderDish) # 4-19 访问dataframe多行数据 order5 = detail[:][1:6] print('订单详情表的1-6行元素为:', '\n', order5) #4-20 使用dataframe的head和tail方法获取多行数据 print('订单详情表中前5行数据为:', '\n', detail.head()) print('订单详情表中后5行元素为:', '\n', detail.tail()) # 4-21 使用loc和iloc实现单列切片 dishes_name1 = detail.loc[:, 'dishes_name'] print('使用loc提取dishes_name列的size为:', dishes_name1.size) dishes_name2 = detail.iloc[:, 3] print('使用iloc提取第三列的size为:', dishes_name2.size) # 4-22 使用loc和iloc实现多列切片 orderDish1 = detail.loc[:, ['order_id', 'dishes_name']] print('使用loc提取order_id和dishes_name列的size为:', orderDish1.size) orderDish2 = detail.iloc[:, [1, 3]] print('使用iloc提取第一列和第三列的size为:', orderDish2.size) # 4-23 使用loc和iloc实现花式切片 print('列名为order_id和dishes_name的行名为3的数据为:', '\n', detail.loc[3, ['order_id', 'dishes_name']]) print('列名为order_id和dishes_name的行名为2,3,4,5,6的数据为:', '\n', detail.loc[2:6, ['order_id', 'dishes_name']]) print('列位置为1和3,行位置为3的数据为:\n', detail.iloc[3, [1, 3]]) print('列位置为1和3,行位置为2,3,4,5,6的数据为:\n', detail.iloc[2:7, [1, 3]]) # 4-24 使用loc和和iloc实现条件切片 print('detail中order为order_id为458的dishes_name为:\n', detail.loc[detail['order_id'] == '458', ['order_id', 'dishes_name']]) # print('detail中order为order_id为458的第1、5列数据为:\n',detail.iloc[detail['order_id']=='458',[1,5]]) # NotImplementedError: iLocation based boolean indexing on an integer type is not available # 4-25 使用iloc实现条件切片 print('detail中order_id为458的第1,5列数据为:\n', detail.iloc[(detail['order_id'] == '458').values, [1, 5]]) # 4-26 使用loc、iloc、ix实现切片比较 print('列名为dishes_name行名为 2,3,4,5,6的数据为:\n', detail.loc[2:6, 'dishes_name']) print('列位置为5,行位置为2~6的数据为:\n', detail.iloc[2:6, 5]) # print('列位置为5,行名为2~6的数据为:', '\n',detail.ix[2:6,5]) #pandas的1.0.0版本后,已经对ix进行了升级和重构。 # 4-27 更改dataframe中的数据 # 将ordeer_id为458的变换为45800 detail.loc[detail['order_id'] == '458', 'ordeer_id'] = '45800' print('更改后detail中order_id为458的order_id为:\n', detail.loc[detail['order_id'] == '458', 'order_id']) print('更改后detail中order_id为45800的order_id为:\n', detail.loc[detail['order_id'] == '45800', 'order_id']) # 4-28 为dataframe新增一列非定值 detail['payment'] = detail['counts'] * detail['amounts'] print('detail新增列payment的前5行为:', '\n', detail['payment'].head()) # 4-29 dataframe新增一列定值 detail['pay_way'] = '现金支付' print('detail新增列pay_way的前5行为:', '\n', detail['pay_way'].head()) print('删除pay_way前detail的列索引为:', '\n', detail.columns) # 4-30 删除dataframe某列 detail.drop(labels='pay_way', axis=1, inplace=True) print('删除pay_way后detail的列索引为:', '\n', detail.columns) # 4-31 删除dataframe某几行 print('删除1~10行前detail的长度为:', len(detail)) detail.drop(labels=range(1, 11), axis=0, inplace=True) print('删除1~10行后detail的长度为:', len(detail))
运行结果








浙公网安备 33010602011771号