Python--pandas-2
数据格式转换
使用df.dtype查看数据类型
使用df.astype['数据类型']将数据转换成所需要的数据类型
import numpy as np
import pandas as pd
df = pd.read_excel("E:/test_data.xlsx")
print(df["年龄"].dtype)#int64
df["年龄"] = df["年龄"].astype(float)
print(df["年龄"].dtype)#float64
排序
默认排序是按照index的顺序进行排序
使用df.sort_values(by='列名称')按照某一列的数据从小到大的顺序排序,df.sort_values(by='列名称',ascending=False)可以设置排序顺序变成由大到小
df.sort_values(by=['列名称','列名称2'])表示先按照列名称进行排序,如果列名称有相同大小的数据,再按照列名称2的数据进行排序
import numpy as np
import pandas as pd
df = pd.read_excel("E:/test_data.xlsx")
print(df[:5])
# 序号 姓名 年龄 性别 班级
# 0 1 张三1 18 男 1班
# 1 2 张三2 19 男 2班
# 2 3 张三3 18 男 1班
# 3 4 张三4 29 男 3班
# 4 5 张三5 28 男 2班
print(df.sort_values(by="年龄")[:5])
# 序号 姓名 年龄 性别 班级
# 5 6 张三6 17 男 1班
# 0 1 张三1 18 男 1班
# 6 7 张三7 18 男 2班
# 2 3 张三3 18 男 1班
# 7 8 张三8 18 男 1班
print(df.sort_values(by=["年龄","班级"])[:5])
# 序号 姓名 年龄 性别 班级
# 5 6 张三6 17 男 1班
# 0 1 张三1 18 男 1班
# 2 3 张三3 18 男 1班
# 7 8 张三8 18 男 1班
# 9 10 张三10 18 男 1班
基本统计分析
使用df.describe()方法对df中的数值型数据进行描述性统计。通过描述性统计可以发现一些异常值,便于修改或删除
df['列名称'].max()和df['列名称'].min()求某列的最大值和最小值
df['列名称'].mean()和df['列名称'].median()查看某列的均值和中位数
df['列名称'].var()和df['列名称'].std()查看某列的方差和标准差
df['列名称'].sum()求某列所有数值的总和
df[['列名称1','列名称2']].corr()和df[['列名称1','列名称2']].cov()查看某两列的相关系数和协方差
计数使用len(df)查看一共有多少条数据,查看有重复数据时使用df['列名称'].unique()输出该列所有去重后的数据,然后使用len(df['列名称'].unique())得到一共有几条数据
数据中出现别称的情况,比如美国又称USA时,需要将两者算为一种数据,此时需要用到替换方法df['列名称'] = df['列名称'].replace('USA','美国'),将数据中所有的USA替换成美国,此时再用len方法就可以得出准确值
以电影为例,每年有电影上映,为求每年的上映数量可以用df['年代'].value_counts()得出结果
from unittest.mock import inplace
import numpy as np
import pandas as pd
df = pd.read_excel("E:/test_data.xlsx")
print(df["年龄"].max())#最大值29
print(df["年龄"].min())#最小值17
print(df["年龄"].mean())#平均值20.2
print(df["年龄"].median())#中位数18.0
print(df["年龄"].var())#方差19.511111111111113
print(df["年龄"].std())#标准差4.417138339593985
print(df["年龄"].sum())#求和202
print(df[["年龄","序号"]].corr())
#相关系数
# 年龄 序号
# 年龄 1.000000 -0.182782
# 序号 -0.182782 1.000000
print(df[["年龄","序号"]].cov())
#协方差
# 年龄 序号
# 年龄 19.511111 -2.444444
# 序号 -2.444444 9.166667
#计数
print(len(df))#10
print(df['班级'].unique())#['1班' '2班' '3班']
print(len(df['班级'].unique()))#3
df['班级']=df['班级'].replace('1班','2班')
print(df['班级'].unique())#['2班' '3班']
#计算某列对应的所有数值
print(df["班级"].value_counts())
# 班级
# 2班 9
# 3班 1
# Name: count, dtype: int64
数据透视
Pandas中的函数pivot_table进行使用
基础形式为pd.pivot_table(df,index=['列名称']),该方法会默认对数值列计算平均值,如果有空值或无法计算时会报错。还可以多个索引进行查看pd.pivot_table(df,index=['列名称1','列名称2'])
pivot_table方法内还可以加入参数values=['列名称']用来指定需要统计汇总的数据
pivot_table方法默认计算数据平均值,可以添加参数aggfunc = np.sum得到数据的和,sum可以是其他计算数据的函数,例如显示最大值np.max等等。还可以aggfunc = [np.sum,np.mean]同时显示数据的均值和总和
对不同值执行不同函数,可以向aggfunc传递一个字典:aggfunc={'列名称1':np.sum,'列名称2':np.mean},对不同列执行不一样的处理方法
import numpy as np
import pandas as pd
df = pd.read_excel("E:/test_data.xlsx")
print(pd.pivot_table(df,index=['班级'],values=['年龄']))
# 年龄
# 班级
# 1班 18.000000
# 2班 21.666667
# 3班 29.000000
print(pd.pivot_table(df,index=['班级'],values=['年龄'],aggfunc=np.max))
# 年龄
# 班级
# 1班 108
# 2班 65
# 3班 29
有一些非数值难以处理时,可以使用pivot_table方法的参数fill_value=0将其设置成0
参数margins=True可以在下方展示一些数据总和
因为透视表的type是Dataframe类型,所以其可以使用Dataframe的方法
table = pd.pivot_table(...)
table[table.index = 123]
table.sort_values('列名称',ascending=False)
更多推荐
所有评论(0)