一、创建Series对象的几种方法
import pandas as pd
#传入一个列表
S1=pd.Series(["a","b","c","d"])
#指定索引
S2=pd.Series([1,2,3,4],index=["a","b","c","d"])
#传入一个字典
S3=pd.Series({"a":1,"b":2,"c":3,"d":4})
#获取Series的索引和值
S1.index #索引
S1.values #值
二、创建DataFrame对象的几种方法
import pandas as pd
#传入一个列表
df1 = pd.DataFrame(["a", "b", "c", "d"])
#传入一个嵌套列表
df2 = pd.DataFrame([["a", "A"], ["b", "B"], ["c", "C"], ["d", "D"]])
#指定行、列索引
df3 = pd.DataFrame([["a", "A"], ["b", "B"], ["c", "C"], ["d", "D"]], columns = ["小写", "大写"], index = ["一", "二", "三", "四"])
#传入一个字典
data = {"小写" : ["a", "b", "c", "d"], "大写" : ["A", "B", "C", "D"]} df4 = pd.DataFrame(data)
#获取DataFrame的行、列索引 df.columns #行索引 df.index #列索引
三、Pandas的常用方法
一、Series对象的几种方法
import pandas as pd
#传入一个列表
S1=pd.Series(["a","b","c","d"])
#指定索引
S2=pd.Series([1,2,3,4],index=["a","b","c","d"])
#传入一个字典
S3=pd.Series({"a":1,"b":2,"c":3,"d":4})
#获取Series的索引和值
S1.index #索引
S1.values #值
二、DataFrame对象的几种方法
import pandas as pd
#传入一个列表
df1 = pd.DataFrame(["a", "b", "c", "d"])
#传入一个嵌套列表
df2 = pd.DataFrame([["a", "A"], ["b", "B"], ["c", "C"], ["d", "D"]])
#指定行、列索引
df3 = pd.DataFrame([["a", "A"], ["b", "B"], ["c", "C"], ["d", "D"]], columns = ["小写", "大写"], index = ["一", "二", "三", "四"])
#传入一个字典
data = {"小写" : ["a", "b", "c", "d"], "大写" : ["A", "B", "C", "D"]}
df4 = pd.DataFrame(data)
#获取DataFrame的行、列索引
df.columns #行索引
df.index #列索引
三、Pandas的常用方法
df.head() #默认展示前5行,hend(2)表示展示前2行
df.shape() #获取表的行、列数
df.info() #查看数据表中的数据类型
df.describe() #获取数值分布情况
#缺失值判断处理
df.info() #查看数据表中的数据类型,可以用来判断数据的缺失情况
df.isnull() #判断哪个值是缺失值,判断整个表,不是判断某一个
df.dropna() #默认删除含有缺失值的行,只要该行有缺失值,就整行删除
df.dropna(how = 'all') #只删除所有字段都为空的行
df.fillna(0) #对数据表中的所有空值填充为0
df.fillna({"性别" : "男", "年龄" : "30"}) #传入一个字典,对性别、年龄字段的空值填充
#重复值判断处理
df.drop_duplicates() #默认对所有值进行重复值判断,且默认保留第一个(行)值
df.drop_duplicates(subset = '唯一识别码') #通过"唯一识别码"去重,保留第一个(行)值
df.drop_duplicates(subset = ['客户姓名', '唯一识别码']) #通过列表中的字段去重
'''通过keep参数自定义删除重复项时保留哪个,值:first(保留第一个),last(保留最后一个值),False(删除所有重复值)'''
df.drop_duplicates(subset = ['客户姓名', '唯一识别码'], keep = 'last')
#异常值判断处理
'''
1、划定不同指标的正常范围
2、绘制箱形图,大于或小于正常值的为异常值
3、如果数据服从正态分布,利用3σ原则(如果一个数值与平均值之间的偏差超过3倍标准差,那么这个值就是异常值)
'''
#数据类型转换
df["唯一识别码"].dtype #查看唯一识别码这一列的数据类型
df["唯一识别码"].astype("float64") #转换成float类型
#索引
df.columns = ["订单编号", "客户姓名", "唯一识别码", "成交时间"] #添加列索引
df.index = [1, 2, 3, 4, 5] #添加行索引
df.set_index("订单编号") #重新设置行索引
#重命名索引
df.rename(columns = {"订单编号" : "新订单编号", "客户姓名" : "新客户姓名"}, index = {1 : "一", 2 : "二", 3 : "三", 4 : "四"})
'''
重置索引
level:指定要将层次化索引的第几级别转化为columns,默认为全部索引
drop:指定是否将原索引删除,即不作为一个新的columns,默认是False
inplace:是否修改原数据表
'''
reset_index(level = None, drop = False, inplace = False)
#选择某一列/某几列
#1、传入具体列名
df["订单编号"] #一列
df[["订单编号", "客户姓名"]] #多列
#loc是基于行标签和列标签名字进行索引
#2、位置索引,使用iloc方法
df.iloc[:, [0,2]] #获取第一列和第三列的所有行的数值,逗号前面的部分表示要获取的行
#切片索引
df.iloc[:, 0:3] #获取第一列到第四列之间的所有行的数据
#选择某一行/某几列
df.loc["一"] #选择一行
df.loc["一", "二"] #选择第一行和第二行
df.iloc[0] #选择第一行
df.iloc[[0,1]] #选择第一行和第二行
df.iloc[0:3] #选择第一行到第三行
df[df["年龄"]<200] #选择年龄小于200的数据
#同时选择行、列
#1、普通索引+普通索引
df.loc[["一", "二"], ["订单编号", "唯一识别码"]]
#2、位置索引+位置索引
df.iloc[[0,1], [0,2]]
#3、布尔索引+普通索引
df[df["年龄"]<200][["订单编号", "年龄"]]
#4、切片索引+切片索引
df.iloc[0:3, 1:3]
#5、切片索引+普通索引
df.ix[0:3, ["客户姓名", "唯一识别码"]]
#对某个值进行替换 replace()
df["年龄"].replace(240, 33, inplace = True) #将240替换为33,不修改原来的表
df.replace(np.NaN, 0) #np.NaN是对缺失值的一种表示方法,对全表中的缺失值进行替换,相当于fillna()
df.replace([240, 260, 280], 33) #多对一替换
df.replace({240:32, 260:33, 280:34}) #多对多替换
#按照coll列进行排序,ascending默认为True升序,False为降序;na_position表示对缺失值的显示位置进行设置,默认参数值为last,表示将缺失值显示在最后。
df.sort_values(by = ["coll"], ascending = False, na_position = "first")
df.sort_values(by = ["coll1", "coll2"], ascending = [True, False])
#数值排名
'''
rank(method, ascending)
1、method参数用来指明待排列值有重复值时的处理情况,
average:返回重复值的平均值;
first:按值在所有的待排列数据中出现的先后顺序排名;
min:返回重复值的最佳排名
max:返回重复值的最大排名
2、ascending参数默认为升序排序,如果值为False则为降序排序
'''
df["销售ID"].rank(method="average", ascending = "False")
#数值删除,使用drop()方法,通过设置axis的值来判断删除行还是删除列
df.drop(["销售ID", "成交时间"], axis = 1) #axis=1表示删除列,如果=0就表示删除行
df.drop(df.columns[[4, 5]], axis = 1)
df.drop(df.index[[0, 1]],axis = 0) #axis=0表示删除行
df.drop(columns = ["销售ID", "成交时间"]) #使用这种方式删除列不需要设置axis值
df.drop(index = ["0a", "1b"]) #使用这种方式删除行不需要设置axis值
df[df["年龄"]<40] #删除特定行,把与特定值相反的值筛选出来从而实现删除特定行
#数值计数,使用value_counts()方法
#通过设置normalize参数可以显示不同值出现的占比,默认为False
df["销售ID"]value_counts()
df["销售ID"].value_counts(normalize = True, sort = False)
#获取唯一值,可以通过drop_duplicates()方法进行重复值判断,也可以利用unique()方法
df["销售ID"] = unique()
#数值查找,使用isin()查看数据表中是否包含某个值
df.["年龄"].isin([31, 21]) #查找年龄列是否存在31、21两个值
df.isin(["A2",31]) #在全表查找是否存在A2、31两个值
#区间切分,切分结果是左开右闭的区间
#1、使用cut()方法,该方法参数bins用来指明切分区间
pd.cut(df["年龄"], bins = [0,3,6,10])
#2、使用qcut()方法不需要事先指明切分区间,只需要指明切分个数
pd.qcut(df["年龄"], 3)
#插入新列,只能通过拼接获取新表
#插入新列,使用insert()方法,指明要插入的位置、插入后新列的列名,插入的数据
df.insert(2, "商品类别", ["cat01", "cat02", "cat03", "cat04", "cat05"])
df["商品类别"] = ["cat01", "cat02", "cat03", "cat04", "cat05"]
#行列转换,使用.T方法
df.T
df.T.T #对表转置后再转置
#索引重塑,就是将原来的索引进行重新构造
df.stack() #把数据从表格型数据转换到树形数据的过程叫重塑
df.unstack() #把树形数据转换到表格型数据
#宽表转换为长表
#1、使用stack()方法,现将不转换的列设置成索引,然后调用stack()方法,再进行索引重置
df.set_index(["Company", "Name"]).stack().reset_index()
#2、使用melt()方法,id_vars参数用于指明宽表转换到长表时保持不变的列,var_name参数表示原来的列索引转化为"行索引"以后对应的列名,value_name表示新索引对应的值的列名
df.melt(id_vars = ["Company", "Name"], var_name = "Year", value_name = "Sale")
#长表转换为宽表,数据透视表
df.pivot_table(index = ["Company", "Name"], columns = "Year", values = "Sale")
#apply()和applymap(),执行相同的函数操作
df["C1"].apply(lambda x:x+1) #对某一列或某一行中的元素执行相同的函数操作
df.applymap(lambda x:x+1) #对整个表格中的每一个元素执行相同的函数操作
#汇总运算,统计非空值count()、求和sum()、求平均值mean()、求最大值max()、求最小值min()、求中位数median()、求众数mode()、求方差var()、求标准差std(),以上函数具体用法大体一致,如下:
df.count() #返回数据表中每列的非空值的个数
df["C1"].count() #返回指定列的非空值的个数
df.coutn(axis = 1) #返回数据表中每行的非空值的个数
#quantile求分位数
df.quantile(0.25) #求每一列四分之一分位数
df.quantile(0.25, axis = 1) #求每一行四分之一分位数
#相关性运算
df["col1"].corr(df["col2"]) #求col1和col2之间的相关性
df.corr() #求整个表的两两之间的相关性
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)