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 命令:

bash 复制代码
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/

bash 复制代码
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/
bash 复制代码
# 版本错误 执行如下:
pip uninstall  sqlalchemy
pip install  sqlalchemy ==1.4.31

2.1 pandas操作csv

方法:

read_xxx

to_xxx

pandas.read_csv(文件路径,分隔符默认',',指定读取的列名)

step1.导包,修改相对路径的位置;(引入文件)

python 复制代码
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

step2.读取csv文件。

python 复制代码
# 1. Pandas操作csv 文件;
data = pd.read_csv("./data/LJhouse.csv",sep=',',usecols=['open','hign','close','close'])  # 用df
data

step3.写入csv文件。

python 复制代码
# 2. Pandas操作csv 文件,保存为csv文件  ;把读取到的数据保存为csv文件 写到文件中;
data[:10].to_csv("./data/my_file1.csv",sep=',',index=False)  # 不要索引列 index=False
print('写入成功!')

step4.读写tsv文件。

python 复制代码
# 3.特殊csv文件 tsv 文件
# tsv文件以 tab 键为分隔符
data[:5].to_csv("./data/my_file2.tsv",sep='\t',index=True)  # 要索引;  右键刷新data
print('写入成功!')

# 4. 读取tsv 文件
df2 = pd.read_csv("./data/my_file2.tsv",sep='\t',index_col=0)  # 第一列设置为索引列 index_col=0
df2

完整代码:

python 复制代码
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=False
print('写入成功!')

pd.read_csv("./data/test.csv")

# 3.特殊csv文件 tsv 文件
# tsv文件以 tab 键为分隔符
data[:5].to_csv("./data/my_file2.tsv",sep='\t',index=True)  # 要索引;  右键刷新data
print('写入成功!')

# 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 ;

bash 复制代码
 pip install 模块名
bash 复制代码
pip install pymysql
bash 复制代码
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/

运行版本有问题执行如下:

bash 复制代码
# 版本错误 执行如下:
pip uninstall  sqlalchemy
pip install  sqlalchemy ==1.4.31

查看mysql表;

sql 复制代码
 show databases;

use test;
show tables;

step1.导入包

python 复制代码
#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数据库

python 复制代码
# 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数据。

python 复制代码
# 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文件。

bash 复制代码
#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.打印读取到的内容。

bash 复制代码
# 1.读取json文件。  参数1.文件路径  2.读取的格式 3.是否按行读取;
json_df = pd.read_json('./data/test.json',orient='columns',lines=True)

# 2. 打印读取到的内容

json_df

step3.写入到json文件。

bash 复制代码
# 3. 把上述的数据,写到json文件中
json_df.to_json('./data/test1.json',orient='records',lines=True)  # 
print('写入成功')

2.4 读写excel

read_excel

to_excel

二、 Pandas数据分析

Pandas分析房产数据示例步骤:

step1.导入包。

python 复制代码
# 导包
import pandas as pd
import numpy as np
import os


os.chdir(r'D:\Python_Code\Python_Code\day02')

step2.加载数据集。

python 复制代码
# 1.加载数据集
house_df = pd.read_csv("./data/LJhouse.csv")
house_df

step3.查看数据集。

python 复制代码
# 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.分析具体需求。

python 复制代码
# 具体需求

# 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完整代码:

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()  
相关推荐
Dxy123931021616 小时前
DataFrame时间序列操作:从基础到高级的时间数据处理指南
pandas
-To be number.wan3 天前
用 Pandas 分析自行车租赁数据:从时间序列到天气影响的完整实训
python·数据分析·pandas·数据可视化
Dxy12393102164 天前
DataFrame索引功能详解
pandas
没事偷着乐琅6 天前
二、Pandas 是啥 是数据库吗?
数据库·pandas
Flying pigs~~6 天前
Pandas绘图和Seaborn绘图
数据挖掘·数据分析·pandas·seaborn·python可视化
Dxy12393102167 天前
DataFrame数据操作能力深度解析:从基础到高级的完整指南
pandas
好家伙VCC7 天前
# 发散创新:用Python+Pandas构建高效BI数据清洗流水线在现代数据分析领域,**BI(商业智能)工具的核心竞
java·python·数据分析·pandas
深蓝电商API7 天前
爬虫数据清洗:Pandas 处理缺失值与异常
爬虫·pandas
Flying pigs~~9 天前
数据分析三剑客之Pandas
大数据·数据库·人工智能·数据分析·numpy·pandas