pandas模块补充和DataFrame的知识学习
pandas模块补充和DataFrame的知识学习
- Series数据操作
- 基本算术方法
- DataFrame
- 如何读取外部数据
- 数据概览
- 行列操作
- 数据筛选
Series数据操作
数据准备
res=pd.Series([11,22,33,44])
增加数据
res['a']=88
res
查数据
res.loc['a']
输出88
删数据
del res[0]
res
算数运算符
算数符介绍
""" add 加(add) sub 减(substract) div 除(divide) mul 乘(multiple) """
实践与运用
sr1 = pd.Series([12,23,34])
sr3 = pd.Series([11,20,10,14])
s1.add(s3)
s1.add(s3,fill_value=0)
构造:
1.
pd.DataFrame({'one':[1,2,3,4],'boc':[5,6,7,8]})
2.
pd.DataFrame({'one':pd.Series([1,2,3],index=['a','b','c']),'two':pd.Series([1,2,3],index=['b','a','c'])})
3.
pd.DataFrame(np.array([[10,20],[30,40]]),index=['a','b'],columns=['c1','c2'])
4.
pd.DataFrame([np.arange(10,20),np.arange(30,40)])
""" 以上创建方式都仅仅做一个了解即可 因为工作中dataframe的数据一般都是来自于读取外部文件数据,而不是自己手动去创建 """
常见属性
数据准备
fh=pd.DataFrame([np.arange(10,20),np.arange(30,40)])
行索引
fh.index
列索引
fh.columns
转置
fh.T
值索引
fh.values
快速索引
fh.describe
读取外部数据
pd.read_csv() # 可以读取文本文件和.csv结尾的文件数据 pd.read_excel() # 可以读取excel表格文件数据 pd.read_sql() # 可以读取MySQL表格数据 pd.read_html() # 可以读取页面上table标签内所有的数据
文本文件读取
语法:
pd.read_csv(filepath_or_buffer, sep=',', header='infer', names=None, usecols=None, skiprows=None, skipfooter=None, converters=None, encoding=None)
参数介绍
filepath:指定txt文件或csv文件所在的具体路径 sep:指定原数据集中各字段之间的分隔符,默认为逗号”,” id name income 1 jj 10 header:是否需要将原数据集中的第一行作为表头,默认将第一行用作字段名称 如果原始数据没有表头需要将该参数设置为None names:如果原数据集中没有字段,可以通过该参数在数据读取时给数据框添加具体的表头 usecols:指定需要读取原数据集中的哪些变量名 skiprows:数据读取时,指定需要跳过原数据集开头的行数 有一些表格开头是有几行文字说明的,读取的时候应该跳过 skipfooter:数据读取时,指定需要跳过原数据集末尾的行数 converters:用于数据类型的转换(以字典的形式指定) encoding:如果文件中含有中文,有时需要指定字符编码
基本操作
文件内容
简单读取
import pandas as pd pd.read_csv(r'a.txt')
复杂读取
pd.read_csv(r'a.txt', # 自动过滤掉完全无内容的空行(写2、3都行) skiprows=0, # 以空格为分隔符 sep=' ', # 此处不指定末尾跳过行数 skipfooter=0, # 针对id原本是01、02自动变成了1、2... converters = {'id':str}, # 选择字符编码防止文件出现乱码 encoding='utf-8', # 移除收入千分位非逗号的其他符号 thousands='&', # 手动将文件表头行删除再次读取 header=None, # 定义表头 names = ['id','name','gender','salary'] )
指定读取
pd.read_csv(r'a.txt', # 加上上诉部分 # 指定读取字段 usecols=['id','name'])
语法:
pd.read_excel(io, sheetname=0, header=0, skiprows=None, skip_footer=0, index_col=None, names=None,
na_values=None, thousands=None, convert_float=True)
参数介绍:
io:指定电子表格的具体路径
sheet—name:指定需要读取电子表格中的第几个Sheet,既可以传递整数也可以传递具体的Sheet名称
header:是否需要将数据集的第一行用作表头,默认为是需要的
skiprows:读取数据时,指定跳过的开始行数
skip_footer:读取数据时,指定跳过的末尾行数
index_col:指定哪些列用作数据框的行索引(标签)
na_values:指定原始数据中哪些特殊值代表了缺失值
thousands:指定原始数据集中的千分位符
convert_float:默认将所有的数值型字段转换为浮点型字段
converters:通过字典的形式,指定某些列需要转换的形式
基本操作
文本内容
简单读取
pd.read_excel(r'a.xlsx')
复杂操作
pd.read_excel(r'a.xlsx', # 不设置头标签 header=None, # 定义头标签 names=['ID','name','age'], # 定义ID数据格式 converters={'ID':str} )
''' 表格的参数和文件的参数操作相类似 '''
数据库数据读取
# 在anaconda环境下,要安装pymysql模块
语法:
conn = pymysql.connect(host,port,user,password, database, charset)
参数介绍:
host:指定需要访问的MySQL服务器
port:指定访问MySQL数据库的端口号 charset:指定读取MySQL数据库的字符集,如果数据库表中含有中文,一般可以尝试将该参数设置为 “utf8”或“gbk”
user:指定访问MySQL数据库的用户名
password:指定访问MySQL数据库的密码
database:指定访问MySQL数据库的具体库名
基本操作:
数据库访问
import pymysql newcon=pymysql.connect( # 本机地址 host='127.0.0.1', # 网络端口 port=3306, # 用户名 user='root', # 密码输入数据类型为字符 password='111', # 进入b1数据库 database='b1', # 字符编码 charset='utf8', # 自动确认,可执行增删改操作 autocommit=True ) # 读取t1表信息 pd.read_sql('select * from t1',con=newcon)
关闭连结
newcon.close()
网页表数据读取
语法:
获取网页中的第一个列表
pd.read_html(r'https://baike.baidu.com/item/NBA%E6%80%BB%E5%86%A0%E5%86%9B/2173192?fr=aladdin')[0]
数据概览
数据准备
fh=pd.DataFrame([np.arange(10,20),np.arange(30,40),np.arange(50,60)])
fh
参数介绍
.columns # 查看列 .index # 查看行 .shape # 行列 .dtypes # 数据类型 .head() # 取头部多条数据 .tail() # 取尾部多条数据
基本使用
fh.columns
# 显示头部一行 fh.head(1)
fh.dtypes
行列操作
获取指定列对应的数据
语法:
df['列字段名词']
获取0列数据
df[0]
列名修改
语法:
df.rename(columns={'旧列名称':'新列名称'})
eg:
fg=pd.read_excel(r'a.xlsx', # 不设置头标签 header=None, # 定义头标签 names=['ID','name','age'], # 定义ID数据格式 converters={'ID':str} ) print(fg) #将age改成年龄 fg.rename(columns={'age':'nianlin'}) fg
创建列
语法:
df['新列名称']=内容
eg:
# 新增worktime列,值为2
fg['worktime']=2 fg
# start内容为age-worktime fg['start']=fg.age-fg.worktime fg
定义位置
语法:
df.insert(位置值,'新列名称',新数据)
eg:
在第3列后插入
fg.insert(3,'country',CN)
添加行
语法:
表1=表2.append(df3)
eg:
fg2=pd.DataFrame({'ID':[5],'name':['gg'],'age':23,'country':['CN'],'worktime':[2],'start':[21]}) fg2
将fg2和fg合并为fg1
fg1=fg.append(fg2)
fg1
删除行
1. 删除指定行
new_df = df.drop(index='行索引') new_df = df.drop('行索引', axis='index') new_df = df.drop('行索引', axis=0)
2. 删除指定的多行
new_df = df.drop(index=['行索引1', '行索引2']) new_df = df.drop(['行索引1', '行索引2'], axis='index') new_df = df.drop(['行索引1', '行索引2'], axis=0)
3. 删除指定列
new_df = df.drop(columns='列名') new_df = df.drop('列名', axis='columns') new_df = df.drop('列名', axis=1)
4. 删除指定的多列
new_df = df.drop(columns=['列名1', '列名2']) new_df = df.drop(['列名1', '列名2'], axis='columns') new_df = df.drop(['列名1', '列名2'], axis=1)
数据筛选
获取指定列数据
# 单列数据 fg['ID']
# 多列数据 fg[['ID','name']]
获取指定行数据
数据准备
lig=pd.read_excel(r'新房子数据.xlsx'})
获取指定行数据
# 查早有电梯的
lig.loc[lig['配备电梯']=='有']
# 获取有电梯的总价小于750的,只显示房屋名称,总价,朝向 lig.loc[(lig['配备电梯']=='有')&(lig['总价'] < 750),['房屋名称','总价','房屋朝向']]
数据处理
数据准备
readfile=pd.read_csv(r'a.txt', # 以空格分隔 sep=' ', # 没有表头 header=None, # 定义表头 names = ['id','name','gender','salary','year']) readfile
更改时间格式
语法:
变量.属性= pd.to_datetime(变量.属性, format = '%Y年%m月')
eg:
readfile.year = pd.to_datetime(readfile.year, format = '%Y年%m月') readfile
更改数字类型
语法:
变量.属性 = 变量.属性.str[:-1].astype(float)
eg:
readfile.salary=readfile.salary.str[:-1].astype(float)
readfile