Python核心语法-Pandas读写csv和tsv文件
一、pandas文件读取
python跨平台,Windows,MacOS,Linux都可以运行。功能比Excel,PowerBI tableau等软件强大。Python在非结构化数据(文本,图像)和深度学习领域更有优势。
numpy(Numerical Python)是Python语言的一个扩展程序库。是一个运行速度非常快的数学库,主要用于数组计算。
Pandas 是一个强大的分析结构化数据的工具集。它的使用基础是Numpy(提供高行呢个的矩阵运算)。用于数据挖掘和数据分析,同时也提供数据清洗功能。
Matplotlib是一个功能强大的数据可视化开源Python库。
Seaborn是一个Python数据可视化开源库。建立在Matplotlib之上,并继承了pandas的数据结构。面向数据集的API,与pandas配合使用更方便。
环境准备
anaconda:
cmd 启动 进conda base
conda install 包名字
或者 Anaconda prompt 以管理员身份启动。
conda 命令:
conda install 包名字 conda create -n 虚拟环境名字 conda activate conda deactivate conda remove -n conda list env conda search pymysql pip安装:
pip install 包名字
使用pip安装时要指定安装源。
阿里云:https://mirrors.aliyun.com/pypi/simple/
豆瓣:https://pypi.douban.com/simple/
清华大学:https://pypi.tuna.tsinghua.edu.cn/simple/
中国科学技术大学:https://pypi.mirrors.ustc.edu.cn/simple/
pip install pymysql pip install pymysql ==1.0.2 -i https://pypi.tuna.tsinghua.edu.cn/simple/ pip install sqlalchemy pip install sqlalchemy ==2.0.0 -i https://pypi.tuna.tsinghua.edu.cn/simple/ # 版本错误 执行如下: pip uninstall sqlalchemy pip install sqlalchemy ==1.4.31 2.1 pandas操作csv
方法:
read_xxx
to_xxx
pandas.read_csv(文件路径,分隔符默认’,',指定读取的列名)
step1.导包,修改相对路径的位置;(引入文件)
import pandas as pd import numpy as np import os from spyder_kernels.utils.lazymodules import pandas os.chdir(r'D:\python_work\python_work\day02')# 修改相对路径# 解决中文显示问题,import matplotlib as plt plt.rcParams['font.sans-serif']=['SimHei']#如果是Mac本,不支持SimHe的时候,可以修改为 'Microsoft YaHei' 或者 'Arial Unicode MS' plt.rcParams['axes.unicode_minus']=Falsestep2.读取csv文件。
# 1. Pandas操作csv 文件; data = pd.read_csv("./data/LJhouse.csv",sep=',',usecols=['open','hign','close','close'])# 用df data step3.写入csv文件。
# 2. Pandas操作csv 文件,保存为csv文件 ;把读取到的数据保存为csv文件 写到文件中; data[:10].to_csv("./data/my_file1.csv",sep=',',index=False)# 不要索引列 index=Falseprint('写入成功!')step4.读写tsv文件。
# 3.特殊csv文件 tsv 文件# tsv文件以 tab 键为分隔符 data[:5].to_csv("./data/my_file2.tsv",sep='\t',index=True)# 要索引; 右键刷新dataprint('写入成功!')# 4. 读取tsv 文件 df2 = pd.read_csv("./data/my_file2.tsv",sep='\t',index_col=0)# 第一列设置为索引列 index_col=0 df2 完整代码:
import pandas as pd import numpy as np import os from spyder_kernels.utils.lazymodules import pandas os.chdir(r'D:\python_work\python_work\day02')# 修改相对路径# 解决中文显示问题,import matplotlib as plt plt.rcParams['font.sans-serif']=['SimHei']#如果是Mac本,不支持SimHe的时候,可以修改为 'Microsoft YaHei' 或者 'Arial Unicode MS' plt.rcParams['axes.unicode_minus']=False# 1. Pandas操作csv 文件; data = pd.read_csv("./data/LJhouse.csv",sep=',',usecols=['open','hign','close','close'])# 用df data # 2. Pandas操作csv 文件,保存为csv文件 ;把读取到的数据保存为csv文件 写到文件中; data[:10].to_csv("./data/my_file1.csv",sep=',',index=False)# 不要索引列 index=Falseprint('写入成功!') pd.read_csv("./data/test.csv")# 3.特殊csv文件 tsv 文件# tsv文件以 tab 键为分隔符 data[:5].to_csv("./data/my_file2.tsv",sep='\t',index=True)# 要索引; 右键刷新dataprint('写入成功!')# 4. 读取tsv 文件 df2 = pd.read_csv("./data/my_file2.tsv",sep='\t',index_col=0)# 第一列设置为索引列 index_col=0 df2 2.2 Pandas操作mysql
方法:
read_sql
to_sql
前期准备:anaconda需要安装模块:pymysql 和sqlalchemy
管理员运行anaconda prompt , 安装pymysql 和sqlalchemy ;
pip install 模块名 pip install pymysql pip install pymysql pip install pymysql ==1.0.2 -i https://pypi.tuna.tsinghua.edu.cn/simple/ pip install sqlalchemy pip install sqlalchemy ==2.0.0 -i https://pypi.tuna.tsinghua.edu.cn/simple/ 运行版本有问题执行如下:
# 版本错误 执行如下: pip uninstall sqlalchemy pip install sqlalchemy ==1.4.31 查看mysql表;
showdatabases;use test;showtables;step1.导入包
#2.导包from sqlalchemy import create_engine import pandas as pd import numpy as np import os import pymysql os.chdir(r'F:\Dev\Python_Code\Python_numpy')# 1.准备写到mysql数据表的数据 data = pd.read_csv("./data/my_file2.csv",sep=',')# encoding='gbk' ,index_col=0 data 运行如下图:
step2. 数据写入Mysql数据库
# 3.创建引擎对象 engine = create_engine('mysql+pymysql://root:asdfjkl@localhost:3306/test?charset=utf8')# 4.具体的写数据的动作#df2 = pd.read_csv("./data/my_file2.tsv",sep='\t',index_col=0) # 第一列设置为索引列 index_col=0#df2# 参数说明:1. 数据表明, 2. 引擎对象, 3. 是否把索引写入数据库, 4. 如果表存在如何处理 data.to_sql('my_table',con=engine,if_exists='append')# index=False,#5. 提示print('写入成功!')运行如下图:
step3.查看MySQL数据。
# df2.to_sql('my_table',con=engine,if_exists='append',index=False) # if_exists='append'# 6.查看数据 sql_df = pd.read_sql('my_table',con=engine)# select * from my_table limit 0,2 sql_df 运行如下图:
2.3 读写json
read_json
to_json
方法:读取pandas.read_json(typ=‘frame’,lines=False)
step1.读取json文件。
#2.导包 from sqlalchemy import create_engine import pandas as pd import numpy as np import os import pymysql # 解决中文显示问题,import matplotlib as plt plt.rcParams['font.sans-serif']=['SimHei']#如果是Mac本,不支持SimHe的时候,可以修改为 'Microsoft YaHei' 或者 'Arial Unicode MS' plt.rcParams['axes.unicode_minus']= False os.chdir(r'F:\Dev\Python_Code\Python_numpy')step2.打印读取到的内容。
# 1.读取json文件。 参数1.文件路径 2.读取的格式 3.是否按行读取; json_df = pd.read_json('./data/test.json',orient='columns',lines=True)# 2. 打印读取到的内容 json_df step3.写入到json文件。
# 3. 把上述的数据,写到json文件中 json_df.to_json('./data/test1.json',orient='records',lines=True)# print('写入成功')2.4 读写excel
read_excel
to_excel
二、 Pandas数据分析
Pandas分析房产数据示例步骤:
step1.导入包。
# 导包import pandas as pd import numpy as np import os os.chdir(r'D:\Python_Code\Python_Code\day02')step2.加载数据集。
# 1.加载数据集 house_df = pd.read_csv("./data/LJhouse.csv") house_df step3.查看数据集。
# 3.查看数据集 ;# 1.查看数据前5行 house_df.head()# 2.查看列数据分布 house_df.info()# 3.查看列统计指标 ctrl +回车 house_df.discribe(include = all) house_df.discribe()# 默认只统计 数值型数据# 默认统计所有数据(包括字符串)# 4.查看数据形状 house_df.shape #(2760,13)step4.分析具体需求。
# 具体需求# 1.找到租金最低,和租金最高的房子# 思路1 排序 house_df.sort_values(by='小区价格',ascending=True).head(1)#最便宜的 house_df.sort_values(by='小区价格',ascending=False).tail(1)#最贵的 价格一样的考虑不到# 思路2 最小值 最大值 筛选 house_df[house_df.price==1300]#house_df.price.min() house_df[house_df.price==house_df.price.max()] house_df[house_df['小区价格']==house_df['小区价格'].min()]# 思路3 house_df.nlargest(1,'小区价格')# 最大的n个 ,参数1 最大的一个,参数2 列名 思路1的简化版; house_df.nsmallest(1,'小区价格')# 最小的那个#%%# 2. 找到最近新上的10套房源 house_df.sort_values(by='小区房龄',ascending=False).head(10)# 不能这么写;# house_df.nlargest(10,'小区房龄') #%%# 3.查看所有更新时间 house_df.更新时间.unique()Python完整代码:
# 导包import pandas as pd import numpy as np import os os.chdir(r'D:\Python_Code\Python_Code\day02')# F:\Dev\Python_Code\Python_numpy ctrl +shift +c 项目右键复制路径# os.getcwd() # 相对路径hangge# shift +回车 切换第二个#%%# 1.加载数据集 house_df = pd.read_csv("./data/LJhouse.csv") house_df # 2.修改列名为英文--------------------------- house_df['地址'] house_df.columns =['district ','address','title','house_type ','price ','area ','house_type ','orientation ','floor ','total_floor ','age ','subway ','subway_distance ','subway_line ','subway_name ','subway_direction ','subway_distance ','subway_line ','subway_name ','subway_direction ','subway_distance ','subway_line ','subway_name ','subway_direction ','subway_distance ','subway_line']# 'district' ,'address' ,'title' ,house_type ,price ,area ,house_type ,orientation ,floor ,total_floor ,age ,subway ,subway_distance ,subway_line ,subway_name ,subway_direction ,subway_distance ,subway_line ,subway_name ,subway_direction ,subway_distance ,subway_line ,subway_name ,subway_direction ,subway_distance ,subway_line# ['id', '小区名称', '小区地址', '小区类型', '小区价格', '小区面积', '小区房型', '小区朝向', '小区楼层', '小区总楼层', '小区房龄', '小区地铁', '小区地铁距离', '小区地铁线路', '小区地铁名称', '小区地铁方向', '小区地铁距离', '小区地铁线路', '小区地铁名称', '小区地铁方向', '小区地铁距离', '小区地铁线路', '小区地铁名称', '小区地铁方向', '小区地铁距离', '小区地铁线路', '小区地铁名称', '小区地铁方向', '小区地铁'] house_df #%%# 3.查看数据集 ;# 1.查看数据前5行 house_df.head()# 2.查看列数据分布 house_df.info()# 3.查看列统计指标 ctrl +回车 house_df.discribe(include = all) house_df.discribe()# 默认只统计 数值型数据# 默认统计所有数据(包括字符串)# 4.查看数据形状 house_df.shape #(2760,13)#%% md#%%# 具体需求# 1.找到租金最低,和租金最高的房子# 思路1 排序 house_df.sort_values(by='小区价格',ascending=True).head(1)#最便宜的 house_df.sort_values(by='小区价格',ascending=False).tail(1)#最贵的 价格一样的考虑不到# 思路2 最小值 最大值 筛选 house_df[house_df.price==1300]#house_df.price.min() house_df[house_df.price==house_df.price.max()] house_df[house_df['小区价格']==house_df['小区价格'].min()]# 思路3 house_df.nlargest(1,'小区价格')# 最大的n个 ,参数1 最大的一个,参数2 列名 思路1的简化版; house_df.nsmallest(1,'小区价格')# 最小的那个#%%# 2. 找到最近新上的10套房源 house_df.sort_values(by='小区房龄',ascending=False).head(10)# 不能这么写;# house_df.nlargest(10,'小区房龄') #%%# 3.查看所有更新时间 house_df.更新时间.unique()