Python之pandas进阶版(二)

Python之pandas进阶版(二)

——用pandas操作dataframe

一、数据索引

#写入数据
import pandas as pd
data=pd.read_csv('..\data\pokemon\Pokemon.csv')
data=data.set_index('#')

1.使用“[ ]”索引

# 方括号索引
print(data['HP'][1])

在这里插入图片描述

2.使用列属性和行标签

# 使用列属性和行标签
print(data.HP[1])

在这里插入图片描述

3.使用loc访问器

# 使用loc访问器
print(data.loc[1,['HP']])

在这里插入图片描述

4.只选择某些列

# 只取某些列
print(data[['HP','Attack']])

在这里插入图片描述

二、数据切片

1.列选取的差异(series和dataframe)

# 列选取的差异:series和dataframe
print(type(data['HP']))#series
print(type(data[['HP']]))#dataframe

运行结果
在这里插入图片描述

2.利用索引切片

# 用索引切片(包括前十行从'HP'到'defense'的属性)
print(data.loc[1:10,'HP':'Defense'])

运行结果
在这里插入图片描述

3.反向切片

# 反向切片
print(data.loc[10:1:-1,'HP':'Defense'])

在这里插入图片描述

4.从某一列开始到最后一列

# 从某一列开始到最后一列
print(data.loc[1:10,'Speed':])

在这里插入图片描述

三、数据过滤

1.创建一个布尔序列

# 创建一个布尔序列
boolean=data.HP>200
print(boolean)

运行结果
在这里插入图片描述

2.多重过滤

# 多重过滤
first_filter=data.HP>150
second_filter=data.Speed>35
print(data[first_filter&second_filter])

运行结果
在这里插入图片描述

3.基于其他过滤列的过滤

# 基于其他过滤列的过滤
print(data.HP[data.Speed<15])

在这里插入图片描述

四、数据转换

1.使用普通函数

# 使用普通函数
def div(n):
    return n/2
print(data.HP.apply(div))

运行结果
在这里插入图片描述

2.使用Lambda函数

# 使用lambda函数
print(data.HP.apply(lambda n:n/2))

运行结果
在这里插入图片描述

3.使用其他列创建新列

# 使用其他列创建新列
data['total_power']=data.Attack+data.Defense
print(data.head())

在这里插入图片描述

五、修改索引

# 原本的索引名是:
print(data.index.name)
# 改变索引名
data.index.name='index_name'
print(data.head())

运行结果
在这里插入图片描述

# 修改索引需要整体修改所有的索引
print(data.head())
# 首先将数据复制到data1,然后改变索引
data1=data.copy()
# 让索引从100开始
data1.index=range(100,900,1)
print(data1.head())

运行结果
在这里插入图片描述

六、分级索引

# 设置多个索引
data1=data.set_index(['Type 1','Type 2'])
print(data1.head())
# 使用索引
print(data1.loc['Fire','Flying'])

在这里插入图片描述
在这里插入图片描述

七、几个函数

1.pivot()函数

dic={'treatment':['A','A','B','B'],'gender':['F','M','F','M'],'response':[10,45,5,9],'age':[15,4,72,65]}
df=pd.DataFrame(dic)
print(df)
# pivot()函数重塑
df=df.pivot(index='treatment',columns='gender',values='response')
print(df)

运行结果
在这里插入图片描述

2.melt()函数

# melt函数:pivot()函数的逆向变换
pd.melt(df,id_vars='treatment',value_vars=['age','response'])
print(df)

运行结果
在这里插入图片描述

3.groupby()函数

print(df.groupby('treatment').mean())

运行结果
在这里插入图片描述

# 选择一个特征
print(df.groupby('treatment').age.max())

运行结果
在这里插入图片描述

print(df.info())
# gender是一个对象
# 如果使用groupby(),我们可以将它转换为categorical数据
# categorical data 占用更小的内存,可以加快groupby之类的操作
# df["gender"] = df["gender"].astype("category")
# df["treatment"] = df["treatment"].astype("category")
# df.info()

在这里插入图片描述

八、堆叠和费堆叠数据

# 堆叠数据
df1=df.set_index(['treatment','gender'])
print(df1)

运行结果
在这里插入图片描述

1.level:未堆叠索引的位置

#level决定索引
print(df1.unstack(level=0))
print(df1.unstack(level=1))

运行结果
在这里插入图片描述

2.swaplevel:改变内外层索引位置

# 改变内外层索引位置
df2=df1.swaplevel(0,1)
print(df2)

在这里插入图片描述
自学自用,希望可以和大家积极沟通交流,小伙伴们加油鸭,如有错误还请指正,不喜勿喷

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柚子味的羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值