Python之pandas进阶版(二)
Python之pandas进阶版(二)
——用pandas操作dataframe
一、数据索引
#写入数据 import pandas as pd data=pd.read_csv(..datapokemonPokemon.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)
自学自用,希望可以和大家积极沟通交流,小伙伴们加油鸭,如有错误还请指正,不喜勿喷
