dataframe两个表合并_Python数据分析:Pandas之DataFrame

本文详细介绍了Python数据分析库Pandas中的DataFrame结构,包括创建方式、索引和切片、属性、级联与合并、基本操作、分组聚合、数据透视表等内容。DataFrame是表格型数据结构,由行索引、列索引和值组成,常用于数据分析。文章通过实例展示了如何使用DataFrame进行数据处理,如创建DataFrame、进行行和列的索引、处理缺失值、删除重复行、排序、替换、映射和运算,以及使用groupby、pivot_table和crosstab进行分组聚合和数据透视。
摘要由CSDN通过智能技术生成

d3fcda629ebe16277ad296a0d1d8e907.png

内容目录

  • DataFrame简介
  • DataFrame创建方式
  • DataFrame索引和切片
  • DataFrame属性
  • DataFrame级联与合并
  • DataFrame基本操作
  • DataFrame分组聚合操作
  • DataFrame数据透视与交叉表

1 DataFrame简介

我们在上次课中讲到了Pandas的Series结构,还没看的点这里

ailsa:python数据分析:Pandas之Series​zhuanlan.zhihu.com
98c6a842541d3f7b39c972fd489aaf57.png

DataFrame是一个[表格型]的数据结构,DataFrame由按一定顺序排列的多列数据组成.设计,初衷是将Series的使用场景从一维拓展到多维。其实DataFrame就是由多个Series组成的,因此可以说DataFrame是Series的容器。

DataFrame由3部分组成

行索引:index

列索引:columns

值:values

长这个样子

71311c49de00b4c07891d99ec84dab7e.png

是不是感觉跟Excel表格很像,跟关系型数据库表也很像,跟SPSS的表也像吧,没错,他们都是极其相似的二维表,这种形式的发明还要追溯到1978年的世界上第一款电子表格Visicalc,想要了解,可以戳这里 ailsa:1.Excel数据分析:Excel最最最基础的操作 有讲到电子表格的发展史,由此可见,二维表对于数据分析还是挺便捷的,要不然咋会有这么多分析软件都采用这种形式呢。那对于DataFrame的学习,大家可以把它想象成excel,原理都是一样的,只是一个是用鼠标点点点,一个是代码敲敲敲。

2 DataFrame创建方式

2.1 使用ndarry创建

#  DataFrame的参数组成 pd.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)
# index指定行索引,columns指定列索引,若不写,则默认从0开始,size指定行数和列数
df = pd.DataFrame(data=np.random.randint(1,10,size=(2,4)),index=["a","b"],columns=["A","B","C","D"])

647dcb883c2c3cc87a9d921002e6922b.png

2.2 使用字典创建

dic = {"name":["张三","李四","王五"],"age":[1,2,3]}
# key为列的索引,行索引则默认从0开始
pd.DataFrame(dic)

d150f1e546d8413fbea56ce1c19d1b73.png

可以看出,以字典形式创建,DataFrame以字典的key作为每一列的列名,以字典的值(一个数组)作为每一列的值,DataFrame会自动加上每一行的索引

3 DataFrame的索引和切片

DataFrame也是分为显示索引和隐式索引

3.1 隐式索引的操作

df = pd.DataFrame(data=np.random.randint(1,10,size=(3,4)))

a72abd6d142896a26f788228eb2e6f86.png
  • df[0][0] df[列][行],获取隐式索引单个元素
  • df[0:2] 对行的切片操作,获取的是0和1行,顾头不顾尾
  • df[[0,1]] 对列的操作,获取第一列和第二列,跟Series不同
  • df.iloc[0:2,0:2] iloc对于隐式索引的操作,获取前两行和前两列组成的区域,逗号前式行,逗号后是列
  • df.iloc[[0,1],[0,1]] iloc对于隐式索引的操作,获取前两行和前两列组成的区域

3.2 显式索引的操作

df1 = pd.DataFrame(data=np.random.randint(1,10,size=(3,4)),index=["a","b","c"],columns=["A","B","C","D"])

3b4fb5d3bf8f2b0c82a2d115868737c3.png
  • df["A"] 或 df.A 获取单列,类似于字典的操作
  • df['A']['a'] 获取单个元素,先列后行 df[列][行]
  • df["a":"b"] 获取是a到b行,包含b行
  • df[["A","B"]] 获取A列和B列
  • df.loc["a":"b","A":"B"] loc对于显式索引的操作,df[行区域,列区域]
  • df.loc[["a","b"],["A","B"]] loc对于显式索引的操作,结果同上

总结

1.DataFrame相对于Series而言,多了对于列的操作,但是是建立在Series基础之上。

2.loc是对于显式索引的相关操作(对于标签的处理),iloc是针对隐式索引的相关操作(对于整数的处理)。

3.df[0:2]切片操作是针对行而言,对于df["A"]索引操作是对于列而言;获取单个元素先列后行,df[列][行];loc和iloc操作,逗号前是行区域或行列表,逗号后是列区域或列列表。

4 DataFrame 的属性

df.values 值

df.columns 列

df.index 行

df.shape 几行几列(行,列)

df.size 大小,行数X列数

,以上面的df为事例

431092073430128e5e1468368d54554a.png

5 DataFrame的级联与合并

  • 级联:pd.concat,pd.append
  • 合并:pd.merge,pd.join

5.1 级联

功能:根据指定的行或列进行值的拼接,不参与任何计算,只是把多个df变成1个

pd.concat()参数(objs, axis=0, join='outer', join_axes=None, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, sort=None, copy=True)

  • axis=0 列方向级联拼接,axis=1行方向级联拼接,默认为0
  • join为级联方式,outer会将所有的项进行级联(忽略匹配和不匹配),取并集,而inner只会将匹配的项级联到一起,不匹配的不级联,取交集。
  • join_axes index对象列表,用于其他n-1轴的特定索引,可以指定根据哪个轴来对齐数据
  • ignore_index boolean,default False。如果为True,请不要使用并置轴上的索引值。结果轴将被标记为0,...,n-1。如果要连接其中并置轴没有有意义的索引信息的对象,这将非常有用。注意,其他轴上的索引值在连接中不受影响。
  • keys 序列,默认值无。使用传递的键作为最外层构建层次索引。如果为多索引,应该使用元组。
  • levels 序列列表,默认值无。用于构建MultiIndex的特定级别(唯一值)。否则,它们将从键推断。
  • names:list,default无。结果层次索引中的级别的名称。

示例数据

dic1 = {'A': ['A0', 'A1', 'A2', 'A3'],
       'B': ['B0', 'B1', 'B2', 'B3'],
       'C': ['C0', 'C1', 'C2', 'C3'],
       'D': ['D0', 'D1', 'D2', 'D3']}

dic2 = {'A': ['A4', 'A5', 'A6', 'A7'],
        'B': ['B4', 'B5', 'B6', 'B7'],
        'C': ['C4', 'C5', 'C6', 'C7'],
        'D': ['D4', 'D5', 'D6', 'D7']}

dic3 = {'A': ['A8', 'A9', 'A10', 'A11'],
        'B': ['B8', 'B9', 'B10', 'B11'],
        'C': ['C8', 'C9', 'C10', 'C11'],
        'D': ['D8', 'D9', 'D10', 'D11']}

df1 = pd.DataFrame(dic1,index=[0, 1, 2, 3])
df2 = pd.DataFrame(dic2, index=[4, 5, 6, 7])
df3 = pd.DataFrame(dic3, index=[8, 9, 10, 11])

pd.concat([df1,df2,df3]) # 默认是按照列方向

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值