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)
自学自用,希望可以和大家积极沟通交流,小伙伴们加油鸭,如有错误还请指正,不喜勿喷