欢迎光临
我们一直在努力

pandas学习

pandas的数据结构和数据类型

导包:import pandas as pd

创建Series对象

1.列表创建Series对象

s1 = pd.Series([1,2,3,4,5])  # index=[]也可以自定义索引

2. 元组创建Series对象

s2 = pd.Series((1,2,3,4,5))  # index=[]也可以自定义索引

3. 字典创建Series对象

s3 = pd.Series('a':1,'b':2,'c':3,'d':4)  # 索引为['a','b','c','d'] 值为[1,2,3,4]

4. numpy创建Series对象

# 索引为[0,1,2,3,4] 值为[0,1,2,3,4]   
# index=[]也可以自定义索引
s4 = pd.Series(np.arange(5))  

常用属性

s1.index 获取索引列数据
s1.value 获取值数据
s3[ 'b' ] 通过索引获得对应值 2
s1.sort_index(ascending=True) 索引升序
s1.sort_values(by='列名', ascending=False) 列名降序

创建DataFrame对象

DataFrame:类似于二维数组或表格,既有行索引也有列索引

1.字典+列表创建DataFrame

info = {
        ‘name’:['a', 'b', 'c'],
        'gender':['male','female','male'],
        'age':[14,35,56]
}

df1 = pd.DataFrame(data=info)

2. 列表+元组创建DataFrame

info = [
     ('a', 'male', 85),
     ('b', 'female', 21),
     ('c','male', 54)
]
df2 = pd.DataFrame(data=info)  # columns=[] 可以自定义列名

3. numpy创建DataFrame

arr1 = np.arrange(12).reshape(3,4)
df3 = pd.DateFrame(data = arr1,columns = ['a','b,'c','d'])

4. 小案例

# 生成10名同学,5门课程,成绩范围:40~100

studf = pd.DateFrame(np.ramdom.randint(40,101,(10,5)))  # 包左不包右

# 修改DateFrame对象的 列名 和 索引值

column_name = ['语文','数学','英语','政治','体育']

index_name = ['同学'  + str(i) for i in range(studf.shape[0])]

# 具体修改DateFrame对象 列名 和 索引值的动作

studf.columns = column_name

studf.index = index_name

# p.s. rename可以实现精准修改

studf.rename(index = {0:'同学0', 4:'同学4'}, columns = {0:'语文', 1:'数学'})

# 打印结果

print(studf)

DateFrame的基本属性

基本属性 含义
.shape 维度(行列数)
.index 行索引
.columns 列名
.values 数据值
.T 转置

DateFrame的基本函数

基本函数 含义
head(n) 查看前n行数据
tail(n) 查看后n行数据
info() 查看df对象的详细信息 
describe() 查看df对象的描述性统计信息
reset_index(drop=False/True) 

重置索引列.

drop=False,默认值,不删除原索引列 

set_index() 重新设置索引

DataFrame的数据类型

pandas数据类型 说明 对应的python类型
Object 字符串类型 string
int 整数类型 int
float 浮点数类型 float
datetime 日期时间类型 datetime包中的datatime类型
timedelta 时间差类型 datetime包中的timedelta类型
category 分类类型 无原生类型,可自定义
bool 布尔类型 bool(True、False)
nan/NaN/NAN 空值类型 None

 Pandas基本数据操作

1. 读取数据

df = pd.read('路径')

2. 移除不需要的字段(axis=0 为列)

df.drop(columns=[列名,列名,…], axis = 0)

3. 获取元素

3.1根据行列索引获取元素,先列后行

df[列名][行索引]

3.2 结合 loc 根据 行索引 和 列名 获取元素

df.loc[行索引, 列名]   #获取一行数据

df.loc[‘2018-02-27’:'2018-02-14', ['open', 'high'] ]  #获取多行多列

3.3 结合 iloc 根据 行号 和 列索引 获取元素

df.iloc[行号, 列索引]

df.iloc[0:5, 0:2] # 包左不包右

4. 赋值操作

df['open'] = 23

df.low = 1  #都会将这一列全改成这个值

#效果相同,但如果字段有空格等,.的方式不行

5. 排序操作

df.sort_values(by='列名', ascending=True/False)  # 根据列名升序/降序排列

# 先基于列名1降序排列,列名1中值相同的再根据列名2降序排列
df.sort_values(by=['列名1','列名2'], asending=[False,False])

df.sort_index(asending=False)  # 按索引排序,默认升序

DateFrame的运算

1.算术运算

#  一列同时 加/减 一个值
df.列名.add(值)        等价       df.列名 + 值
df.列名.sub(值)        等价       df.列名 – 值

2.逻辑运算

2.1. 大于 小于 & | 

df[ df.open >23 ]

df[ (df.open>23) & (df.open<24) ]  # 细节:里面要用小括号

# 可以通过 query() 优化上述代码

df.query('open>23 & open<24')

2.2. 固定值的筛选 isin

df[(df.open==23.53) | (df.open==23.67)]

df.query('open==23.53 | df.open==23.67')

df.query('open in [23.53, 23.67]')

df[df.open.isin([23.53, 23.67])]

# 这三种写法等价

3.统计运算

统计函数 介绍
sum() 每列求和
mean() 每列求均值
median() 每列中位数
min() 每列最小值
max() 每列最大值
mode() 每列众数
abs() 每列绝对值
prod() 每列乘积
std() 每列标准差
var() 每列方差
idxmax() 每列最大值的索引
idxmin 每列最小值的索引
cumsum() 计算前1/2/3/…/n个数的和
cummax() 计算前1/2/3/…/n个数的最大值
cummin() 计算前1/2/3/…/n个数的最小值
cumprod() 计算前1/2/3/…/n个数的积
sort_index() 按索引排序,默认升序

df.sum() # 对每一列进行求和

df.列名.sum() # 对某一列进行求和

p.s. 对单个函数进行统计时,坐标轴的显示方式应遵循默认列“columns”(axis=0,默认值),针对行“index”进行指定,则需指 axis=1

4.apply自定义运算

背景:目前我们用的都是Pandas提供好的函数,例如:count(,max(),min()…

如果要传入一些自定义的逻辑,此时就需要用到 apply()函数了

格式:  df.apply(自定义函数, axis=0)   #0一>列,1一>行

# 例子:同时获得多列的最大值和最小值差值,如,open列和close列

思路1:分解版

# 1.1自定义函数my_func,接收某列的数据,计算该列的最大值与最小值的差

def my_func(col):

        return col.max()-col.min()

# 1.2 获取到open列和close列 (下面四种写法等价)

df[['open', 'close']]
df.loc[:, ['open', 'close']]
df.iloc[:, [0,2]]
df.iloc[:,[0:3:2]]

# 1.3 通过apply函数,调用上述自定义函数,作用到指定的列

df[['open', 'close']].apply(my_func)  #底层 一>把df的各列分别传入函数,计算结果。

思路2:合并版 通过lambda函数实现

df[['open', 'close']].apply(lambda col: col.max() – col.min())

赞(0)
未经允许不得转载:171主机测评 » pandas学习
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址