数据格式转换

使用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)

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐