python模块之pandas前置知识与数据清洗、合并、集成、选取

一、前置知识

1、区别偏差、方差、标准差

  • 样本中各数据比平均值大多少或小多少,这个数值在统计学中称为“偏差”(deviation)。
  • 将差值进行平方再取平均,得出的统计量成为“方差”(variance)。
  • 这个值可以评价数据的波动。方差开方后的数值称为“标准差”(standard deviation),标准差也即偏差的均方根值

2、np.random.randn()、np.random.rand()和np.random.randint()

详细见链接https://blog.csdn.net/mengenqing/article/details/80615668

np.random.randn()函数,返回一个或一组服从标准正态分布的随机样本值。
np.random.rand()函数,返回一个或一组服从“0~1”均匀分布的随机样本值。随机样本取值范围是[0,1),不包括1
np.random.randint()函数,numpy.random.randint(low, high=None, size=None, dtype=’l’) 返回随机整数或整型数组,范围区间为[low,high),包含low,不包含high; 
high没有填写时,默认生成随机数的范围是[0,low)

3、axis=0,与axis=1的区别

详解见文章https://www.cnblogs.com/nyist-/p/7998326.html
在这里插入图片描述

4、有关jupyter的使用技巧——快捷键的使用大全

详细见文章https://blog.csdn.net/create115721/article/details/79243641
在这里插入图片描述在这里插入图片描述

5、有关dtype的用法,自定义数据类型

详细见文章https://blog.csdn.net/qq_16234613/article/details/65935279

二、pandas模块内容——填充值与检索

6、pandas.isnull()判断缺失值一般采用,生成所有数据的true/false,存在则为true,不存在则为False矩阵

df.isnull().any()则会判断哪些”列”存在缺失值

df.notnull().all()同理

7、有关np.random.choice()的用法详解及其参考代码,非常赞

详细见文章链接https://blog.csdn.net/ImwaterP/article/details/96282230

#numpy.random.choice(a, size=None, replace=True, p=None)
#从a(只要是ndarray都可以,但必须是一维的)中随机抽取数字,并组成指定大小(size)的数组
#replace:True表示可以取相同数字,False表示不可以取相同数字
#数组p:与数组a相对应,表示取数组a中每个元素的概率,默认为选取每个元素的概率相同。

8、有关 df.loc[index,col]的用法,实现对满足条件的行列进行操作

详细见文章链接https://blog.csdn.net/lglfa/article/details/80657973

loc 不仅可以输入数字也可以直接column名字,注意先行后列
df.loc[[0, 1, 10, 100], ['country', 'province', 'region_1', 'region_2']]
表示index(行)为0,1,10,100,列名为'country', 'province', 'region_1', 'region_2'

9、有关Pandas —— 唯一值unique( ),计数值value_counts( )及成员资格isin( )

unique输出不重复的值(如果里面重复了多次则只输出一次),value记录每个值出现的次数

详细见文章链接https://blog.csdn.net/starter_____/article/details/79184196

10、pandas:填充缺失值——数据清洗

df.fillna(x)用x替换所有空值

详细见文章链接https://blog.csdn.net/donghf1989/article/details/51167083

4.用前一个数据代替NaN:method='pad'
df.fillna(method='pad')

5.与pad相反,bfill表示用后一个数据代替NaN。这里我们增加一个知识点,用limit限制每列可以替代NaN的数目,下面我们限制每列只能替代一个NaN
df.fillna(method='bfill',limit=1)

11、df.drop()删除原文中的特定的值

详细见文章链接https://www.cnblogs.com/demo-deng/p/9609824.html

三、pandas模块内容——多层索引MultiIndex

1、第一种是元组列表,直接将列的内容用元组括在一起,一组一组

详细见文章参考链接
https://www.cnblogs.com/liyun1/p/11286521.html
https://blog.csdn.net/weixin_38168620/article/details/79580272

m_index1=pd.Index([("A","x1"),("A","x2"),("B","y1"),("B","y2"),("B","y3")],name=["class1","class2"])
m_index1

结果:

MultiIndex(levels=[['A', 'B'], ['x1', 'x2', 'y1', 'y2', 'y3']],
           labels=[[0, 0, 1, 1, 1], [0, 1, 2, 3, 4]],
           names=['class1', 'class2'])
df1=DataFrame(np.random.randint(1,10,(5,3)),index=m_index1)
df1

在这里插入图片描述

2、第二种是用特定的结构,用列表列在一起

levels表示列的内容,第一列用第一个列表列起来,第二个列用第二个列表列起来
labels表示列的顺序,0表示第一个,1表示第二个顺序,连续的0或1表示是同一个内容

注意,当表格呈列分布,即行是索引,列代表内容是,level=0代表一级的列,level=1代表二级的列
如下图。当level=0时,是以'Python''En''Math'作为界限进行求平均值
当level=1时,是以'期中''期末'作为界限进行求平均值

在这里插入图片描述
在这里插入图片描述
name表示列的名字,一般会与随机生成的random.randint一起使用生成随机数的列表

class1=["A","A","B","B"]
class2=["x1","x2","y1","y2"]
m_index2=pd.MultiIndex.from_arrays([class1,class2],names=["class1","class2"])
m_index2

运行:

MultiIndex(levels=[['A', 'B'], ['x1', 'x2', 'y1', 'y2']],
           labels=[[0, 0, 1, 1], [0, 1, 2, 3]],
           names=['class1', 'class2'])
df2=DataFrame(np.random.randint(1,10,(4,3)),index=m_index2)
df2

得图:
在这里插入图片描述

3、多层索引的数值计算

stack 列索引变成行索引
unstack 行索引变成列索引

4、数据合并——append(),concat(),concatenate()

详细见文章连接:https://blog.csdn.net/stevenkwong/article/details/52528616
concatenate(),其中keys=[]代表给合并成的表格可以增加一层以区分来自不同表格的内容

5、数据合并——高级merge()

参考文章:https://www.cnblogs.com/wqbin/p/10363679.html
人类被赋予了一种工作,那就是精神的成长。

有关内连外连参链接:https://blog.csdn.net/plg17/article/details/78758593
详细解释参考链接:https://blog.csdn.net/weixin_38168620/article/details/80529747

merge(left, right, how='inner', on=None, left_on=None, right_on=None,  
      left_index=False, right_index=False, sort=True,  
      suffixes=('_x', '_y'), copy=True, indicator=False)
参数介绍:

     left和right:两个不同的DataFrame;

     how:连接方式,有inner(内连-交集)、left(左连)、right(右连)、outer(外连-并集),默认为inner;

     on:指的是用于连接的列索引名称,必须存在于左右两个DataFrame中,如果没有指定且其他参数也没有指定,则以两个DataFrame列名交集作为连接键;

     left_on:左侧DataFrame中用于连接键的列名,这个参数左右列名不同但代表的含义相同时非常的有用;

     right_on:右侧DataFrame中用于连接键的列名;

     left_index:使用左侧DataFrame中的行索引作为连接键;

     right_index:使用右侧DataFrame中的行索引作为连接键;

     sort:默认为True,将合并的数据进行排序,设置为False可以提高性能;

     suffixes:字符串值组成的元组,用于指定当左右DataFrame存在相同列名时在列名后面附加的后缀名称,默认为('_x', '_y');

     copy:默认为True,总是将数据复制到数据结构中,设置为False可以提高性能;

     indicator:显示合并数据中数据的来源情况
合并有以下几种方式:
列合并:使用left_on,right_on和how。
例子:
# Gives same answer
pd.merge(left, right, left_on=['key2', 'key1'], right_on=['key1', 'key2'], how = 'outer')
pd.merge(left, right, on=['key1', 'key2'], how='outer', indicator=True)
索引索引合并:将left_index和right_index设置为true或use on和use how。
例子:
pd.merge(left, right, how = 'inner', right_index = True, left_index = True)
# If you make matching unique multi-indexes for both data frames you can do
# pd.merge(left, right, how = 'inner', on = ['indexname1', 'indexname2'])
# In your data frames, you're keys duplicate values so you can't do this
# In general, a column with duplicate values does not make a good key
列索引合并:使用left_on+right_index或left_index+right_on及其方式。
注意:index和left_on中的值必须匹配。如果index是整数,而left_on是字符串,则会出现错误。此外,索引级别的数量必须匹配

6、分组聚合——查找规律

可参考文章https://www.jianshu.com/p/4345878fb316
可参考文章https://zhuanlan.zhihu.com/p/29371291
参考链接https://blog.csdn.net/Liangjun_Feng/article/details/80872697

1.常用到的几种基本函数
基本的函数


grouped = df['data1'].groupby(df['key1']).mean() #按key1进行分组,并计算data1列的平均值

有关函数groupby.apply()函数,用于数据的聚合
在这里插入图片描述
2.有关函数groupby.transforma()的应用,与apply()的区别在于,transform()可以完全的保留所有列的数据,如下图表示可知其区别
在这里插入图片描述
在这里插入图片描述
3.有关函数gruopby.agg()与groupby.apply()的区别,apply()是将我们需要的数据按行索引,按行值进行求解,生成的是中间的数据也就是说,我们得到的数据直接输出我们是看不懂的,还需要后面在调用聚合的函数才能输出我们看的懂得内容,而agg()是对每一个列直接进行操作,按列的值直接输出一个新的DataFrame()

7、实战

1.删除某列的空值

参考链接https://blog.csdn.net/KyrieHe/article/details/80326719

mport pandas as pd

# 删除含有空数据的全部行
df4 = pd.read_csv('4.csv',  encoding='utf-8')
df4 = df4.dropna()

# 可以通过axis参数来删除含有空数据的全部列
df4 = df4.dropna(axis=1)

# 可以通过subset参数来删除在age和sex中含有空数据的全部行
df4 = df4.dropna(subset=["age", "sex"])
print(df4)
df4 = df4.dropna(subset=['age', 'body','home.dest'])

2.将某一列的数值输出成表格的形式用DataFrame

pop_density = DataFrame(pop_density)
pop_density

在这里插入图片描述
在这里插入图片描述

3、修改行或列的名字

非常详细的一篇文章https://blog.csdn.net/zhang_diandian/article/details/79903592
里面讲解了如何获取行列的索引、名字,几种方法修改行列的索引值
包括loc,iloc,index,columns,rename等的基础用法

df.rename(index={'A':'D', 'B':'E', 'C':'F'}, columns={'a':'d', 'b':'e', 'c':'f'}, inplace=True)			
#将原来行中的A改为D。。。原来列中的a改为d,期中index代表行索引,columns代表lie索引

或直接这样

pop_density1.columns=['pop_density']

4、最强大的一个函数query(),可以实现算数、过滤、选值等一系列的功能

可参考链接https://blog.csdn.net/jasonzhoujx/article/details/81709526

pop5.set_index(keys ='state',inplace = True)#选state的列之后,按pop_density的大小顺序进行排序
pop5.sort_values(by = 'pop_density')
发布了70 篇原创文章 · 获赞 5 · 访问量 3517

猜你喜欢

转载自blog.csdn.net/qq_42647903/article/details/103010725