pandas讲解
什么是pandas?
# pandas 是一个处理二维数据的一个模块
安装
# pip install pandas
pandas如何读取数据
案例
1.读取cdv,tsv,txt
import pandas as od
res = pd.read_csv(path) # path 文件路径
# 注意只读取表格类型的数据
# 方法
res = pd.read_csv(path) # 读取txt文件
res.head() # 读取数据的行数 默认是5行 # 行数是从 0开始
res.shape # 查看行数,列数 返回值是一个元组,不用加括号调用
res.columns # 查看字段 # Index(['name', 'age', 'hobby'], dtype='object') # 当作 列表支持索引取值
res.index # 查看索引
res.dtypes # 查看每列的数据类型
2 读取excel文件
fpath = r"G:\Django_练习\airflow_test\data_pandas\scorexxxxx.xls" # excel文件路径
res = pd.read_excel(fpath) # 读取文件 # path 文件路径
res.head() # 读取数据的行数 默认是5行 # 行数是从 0开始
res.shape # 查看行数,列数 返回值是一个元组,不用加括号调用
res.columns # 查看字段 # Index(['name', 'age', 'hobby'], dtype='object') # 当作 列表支持索引取值
res.index # 查看索引
res.dtypes # 查看每列的数据类型
3 读取 数据库的数据
pandas数据结构
1.DataFrame # 理解成整个表格 (二维数据)
2.Series # 理解成一行数据,一列数据 (一维数据)
# Series
Series是一种类似于一维数组的对象,它由一组数据(不同数据类型)以及一组与之相关的数据标签(即索引)组成。
# DataFrame
DataFrame是一个表格型的数据结构
1.每一列可以是不同的值类型(数值,字符串,布尔值)
2.既有行索引index,也有列索引columns
3.可以被看作由Series组成的字典
DataFrame
# DataFrame 的理解
DataFrame 可以理解成整个表格对象
案例
# Series
仅有数据列表就可以产生简单的Series
### 简单使用
import pandas as pd
import numpy as np
s1 = pd.Series([1,'a',5.2,7]) # 只含有数据,不包含字段信息
print(s1) #
# 结果
0 1 # 左侧是索引 右侧是数据
1 a
2 5.2
3 7
dtype: object
# 方法
s1.index # 查看索引
s1.values # 查看数据
### 指定索引
s1 = pd.Series([1,'a',5.2,7],s1 = pd.Series([1,'a',5.2,7],index=['a','b','c','d'])
print(s1)
# 结果
a 1 # 左侧指定的索引,右侧数据
b a
c 5.2
d 7
dtype: object
### python字典创建Series
userinfo = {'name': 'sun', 'age': 18}
s1 = pd.Series(userinfo)
# DataFrame
### 通过python字典创建
info = {
'name':['sun','egon'],
'age':[12,20]
}
s2 = pd.DataFrame(info)
# 结果
name age # python中的每一个key都是一个column,value都是一列数据
0 sun 12
1 egon 20
# 方法
s2.dtypes # 查看类型
s2.columns # 查看columns
s2.index # 查看索引
### 从DataFrame中获取查询出Series
1.如果查询出一行或者一列数据,返回的是pd.Series
2.如果查询出的多行,多列返回的就是pd.DataFrame
# 查询出一列,或者一行 就是Series
info = {
'name':['sun','egon'],
'age':[12,20]
}
s2 = pd.DataFrame(info)
print(s2['name']) # 'sun','egon'
print(type(s2['name'])) # <class 'pandas.core.series.Series'>
# 查出多行或者多列就是DataFrame
print(s2[['name','age']]) # 索引里面必须是列表,不然报错
print(type(s2[['name','age']])) # <class 'pandas.core.frame.DataFrame'>
# 查询一行数据
print(s2.loc[0]) # s2.loc[索引]
print(type(s2.loc[1])) # <class 'pandas.core.series.Series'>
# 查询多行数据
print(s2.loc[0:1])
print(type(s2.loc[0:1])) # <class 'pandas.core.frame.DataFrame'>
pandas数据查询
# 五种数据类型的查询
1.数值
2.列表
3.区间
4.条件
5.函数
pandas查询数据方法
1.data.loc # 根据行,列标签查询
2.data.iloc # 根据行,列的数字位置查询
3.data.where
4.data.query
# data.loc 既能查询,又能覆盖写入,强烈推荐
pandas data.loc的五种查询数据的方法
1.使用单个label值查询数据
2.使用值列表批量查询
3.使用数值区间进行范围查询
4.使用条件表达式查询
5.调用函数进行查询
# 方法
data.set_index(数据字段,inplace=True) # 给这个数据修改索引
# 数据的替换
s2['name'][0] = 'xxxxx' # 把name字段的第一行数据替换成 'xxxxxx
data.loc 五种常用查询数据方法
1.使用单个label值查询数据
行或者列,都可以传入单个值,实现精确匹配
data.loc(index,coloumn) # 具体可以查询到某一个值 # Series
data.loc(index,【coloumn1,coloumn2】) # 具体可以查询到某一个值 # Series
2.使用值列表批量查询
data.loc([index1,index2],coloumn1) # 得到一列数据 Series
data.loc([index1,index2],[col1,col2]) # 得到多行,多列数据 DataFrame
3.使用数值区间进行范围查询 # 注意 区间俩头都包含
# 按照行index区间查询
data.loc[index1:index5,coloumn]
# 按照列coloumn区间查询
data.loc[index1,col1:col5]
# 行和列都按照区间查询
data.loc[index1:index5,coloumn1:col5]
4.使用条件表达式查询
bool列表的长度等于行数或者列数
# 简单条件查询,最低温度低于-10的列表
data.loc([data['age']>18,:]) # 取行数的年龄都大于18的行,列取所有
# 复杂的条件查询
data.loc([(data['name'] == 'sun') & (data['age']>18),:])
5.调用函数查询
# 直接写lambda表达式
s2.loc[lambda data:(s2['name'] == 'sun') & (s2['age']>10),:]
# 定义函数
def func(s2):
res = (s2['name'] == 'sun') & (s2['age']>10)
return res
res = s2.loc[func,:]
print(res)
pandas怎样新增数据
1.直接赋值
2.apply
3.assign
4.分条件赋值
直接赋值法
# 实例:清理温度列,变成数字类型
# 修改数据
s2.loc[:,'name'] = s2['name'].str.replace('n','xxx')
# 添加列
s2.loc[:,'hobby'] = 'ainima'
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QbRBFIVf-1627315996164)(C:%5CUsers%5Chuang%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20210726215955390.png)]
apply 赋值
# 实例:添加一列温度列:
1.如果最高温度大于33度就是高温
2.低于-10度就是低温
3.否则是常温
# data.apply
axis = 0 # 取数据的行
axis = 1 # 取数据的列
# 添加一列数据
info = {
'name':['sun','egon'],
'age':[12,20]
}
s2 = pd.DataFrame(info)
def func2(s2):
if s2['age'] >15:
return 'yes'
return 'no'
s2.loc[:,'sex'] = s2.apply(func2,axis=1)
print(s2)
# 方法
s2['sex'].value_counts() # 统计该列的值出现的次数