pandas series

1、什么是series

series就是pandas中的一维标记数组,是主要数据类型之一

其元素包括data、index、dtype、name、copy

其调用例子如下:

import numpy as np
import pandas as pd

s = pd.Series(data=np.random.randint(10,20,size=3),
              index=list('ABC'),name='age',dtype=np.int64)
print(s)

2、Series的索引

其索引包括两种(位置索引、标签索引)

位置索引:和c一样、用‘ [ ] ’进行索引 或者使用 ‘iloc[ ]’

标签索引:使用' [标签名] '或者' loc[标签名] '进行访问

print(s[1])
print(s.iloc[1])
print(s['A'])
print(s.loc['A'])

3、series分区

通过索引进行分区,例子如下

#位置索引
print(s.iloc[1:3])
print(s[1:3])
#标签索引
print(s.loc['A':'C'])
print(s['A':'C'])

值得注意的是,位置索引的1:3只会将s中的1、2进行分区,而标签索引中'A':'C'会将'A' 'B' 'C'三个元素进行分区

4、将series转换成DataFrame

4.1 使用DataFrame函数进行转换

df =pd.DataFrame(s,columns=['python'])

不知道为啥没转换成功

4.2 使用to_frame函数进行转换

df2=s.to_frame(name='python')

如果没有在转换时没有定义name且原series也没定义的话,会使用自然数进行填充

5、创建DataFrame

5.1 方法一 字典

import pandas as pd
data={
    'Name':['Alice','Bob','Charlie'],
    'Age':[25,30,35],
    'City':['New York','London','Paris']
}
df=pd.DataFrame(data)
print(df)

5.2方式二 嵌套元组

data=[ ('Alice',25,'New York'),
    ('Bob',30,'London'),
    ('Charlie',35,'Paris')]
df=pd.DataFrame(data,columns=['name','age','city'])

结果同上图,在创建时需要给每一列定义名字

5.2方式三 NumPy数组创建

df=pd.DataFrame(data=np.random.randint(0,101, size=(500,3)),
                columns=['Math','English','History'],dtype=np.int64
                )
print(df)

 6、pandas读写文件

6.1写文件

通过"to_"+文件后缀的形式进行输出,可以为.csv .json .xlsx等

以5.3为例将df输出为csv如下

df.to_csv('output.csv',index=True,sep=';')
#index=True 表示是否将索引导出
#sep=';' 表示每个元素之间用;进行间隔

在写为excel文件时,如果没有安装openpyxl包会报错,只需要在终端运行 pip install openpyxl。下载好后再次尝试

6.2读文件

使用“read_"开头的函数加上文件类型,常见的包括:CSV、Excel、JSON、SQL数据库等

以6.1写的文件为例进行读入(值得注意的是,写文件时的属性需要在读文件时也对应写上)

df=pd.read_csv('output.csv',sep=';')

7、DataFrame创建多层索引

7.1方式一使用pd.MultiIndex.from_tuples创建索引

tuples为元组 含义就是使用pandas中用元组建立多层索引

import pandas as pd
import numpy as np

#这里创建的两层索引,姓名、考试
index_lables=[('张三','期中'),('张三','期末'),('李四','期中'),('李四','期末')]

mult_index = pd.MultiIndex.from_tuples(index_lables,names=('name','exam'))

data = {
    'python':[98,149,130,147],
    'math':[95,78,143,104]
}
df=pd.DataFrame(data,index=mult_index)

7.2方式二:使用pd.MultiIndex.from_arrays(数组)

index_labels = [['张三','张三','李四','李四'],['期中','期末','期中','期末']]

mult_index=pd.MultiIndex.from_arrays(index_labels,names=('name','exam'))
df=pd.DataFrame(data,index=mult_index)

7.2方式三:使用pd.MultiIndex.from_product(笛卡尔积)

index_lables=pd.MultiIndex.from_product([['张三','李四','王五','赵六'],
                                        ['期中','期末']],
                                        names=['name','exam'])
df=pd.DataFrame(np.random.randint(80,150, size=(8,2)),
                index=index_lables,
                columns=['python','math']
                )

df1=pd.DataFrame(np.random.randint(80,150,size=(2,4)),
                 index=['张三','李四'],
                 columns=pd.MultiIndex.from_product([['python','math'],['期中','期末']]))

笛卡尔积使用的不同其创建的dataframe也不同

df1
df

8、读写多层索引DataFrame        

8.1写文件

与上述写文件一致

8.2读文件(待补充)

调用read_函数,注意声明index_col 参数

df=pd.read_excel('exam.xlsx',header=[0,1],index_col=0)
df1=pd.read_excel('exam1.xlsx',index_col=[0,1])

9、DataFrame数据重塑

 9.1 转置

在进行转置时需要对df重新赋值,直接用df.T是有返回值的

df=df.T

9.2 长宽表转换

使用melt进行长表转换:将宽表转换为长表,即将列名转换为数据中的值

melt方法的参数:
        self
        id_vars  “主键”名字
        value_vars    所有取值的名字
        var_name    原表表头中除去“主键”的表头名称
        value_name: Hashable = "value",
        col_level: Level | None = None,
        ignore_index: bool = True,
import pandas as pd
import numpy as np

data={
    'name':['张三','李四','王五'],
    'math':[86,76,98],
    'en':[87,98,67]
}
df=pd.DataFrame(data)
print(df)                                       
df=df.melt(id_vars="name",value_name='corse',var_name="subject")
print(df)
melt进行长表转换
privot进行宽表转化

privot 进行宽表转化

pivot的参数包括
    self, *, columns, index=lib.no_default, values=lib.no_default
    columns 表示每一列的表头
    index   表示索引
    value   表示元素值
import pandas as pd
import numpy as np

data=pd.read_csv('长表.csv')#即用melt转换的长表进行写的文件
df=pd.DataFrame(data)
print(df)
df=df.pivot(index='name',columns='subject',values='score')
print(df)

10、DataFrame多层索引行列转化

使用stack和unstack方法实现(只需要记住就行,在正常使用的时候多调用调用,找到最想要的样式)

stack 用来将列索引转换为行索引        unstack将行索引转化为列索引

import pandas as pd
import numpy as np

mult_index=pd.MultiIndex.from_product([
    ['张三','李四','王五','赵六'],
    ['期中','期末']
    ])
df=pd.DataFrame(data=np.random.randint(80,150,size=(8,2)),
                index=mult_index,
                columns=['python','math'])

print(df)
print(df.unstack())
#有个参数为level,默认值为-1,自行体验

11、merge数据融合

merge是将两个dataframe根据相同的列进行合并,相当于sql数据库中的join

right : DataFrame或命名的Series ,合并的对象。

how : {‘left’, ‘right’, ‘outer’, ‘inner’}, default ‘inner’ 默认为合并两个frame的交集

        left: 仅使用左frame中的键,类似于SQL左外部联接;保留关键顺序
        right: 仅使用右frame中的键,类似于SQL右外部联接;保留关键顺序。
        outer: 使用两个frame中键的并集,类似于SQL完全外部联接;按字典顺序对键进行排序。
        inner: 使用两个frame中关键点的交集,类似于SQL内部联接;保留左键的顺序。

on:列名或索引 ,必须在两个DataFrame中都能找到。如果on为None且未用 索引 合并,则默认为两个DataFrame中列的交集

left_on : 左DataFrame中的列名或索引。也可以是左DataFrame长度的数组或数组列表。

right_on :右DataFrame中的列名或索引。也可以是右DataFrame长度的数组或数组列表。

left_index : bool, default False 左DataFrame的索引作为连接键

right_index : bool, default False 右DataFrame的索引作为连接键

sort : bool, default False  在结果DataFrame中按字典顺序对连接键排序。如果为False,联接键的顺序取决于联接类型(how关键字)。

copy : bool, 默认为True, 总是将数据复制到数据结构中。设为Fasle,尽可能避免复制。
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_41300650/article/details/102693025

import pandas as pd
import numpy as np

data1={
    'ID':[1,2,3],
    'Name':['Alice','Bob','Charlie']
}

data2={
    'ID':[2,3,4],
    'Age':[25,30,22]
}
df1=pd.DataFrame(data1)
df2=pd.DataFrame(data2)
print(pd.merge(df1,df2,how='outer'))

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randint(0,150,size=(51,2)),
                  columns=['math','python'])
#print(df)
df2=df.mean(axis=1).to_frame("平均分")#为该列设置表头
#print(df2)
#可以使用concat进行整和
#print(pd.concat([df,df2],axis=1))
print(pd.merge(df, df2,left_index=True,right_index=True))

12、join数据连接

join()方法用于根据DataFrame的索引将两个DataFrame中的数据进行合并,使用前提:确保两个DataFrame的索引(或指定的列)有重叠的部分

语法:  df1.join(df2,how='inner')

参数说明:

        self,

        other: DataFrame | Series | Iterable[DataFrame | Series],

        on: IndexLabel | None = None,

        *how: MergeHow = "left",默认为inner 可以设置为 left right outer

        lsuffix: str = "",

        rsuffix: str = "",

        sort: bool = False,

        validate: JoinValidate | None = None,        

示例:

import pandas as pd
import numpy as np

employee_data={
    'employee_id':[101,102,103,104,105],
    'Name':['张三','李四','王五','赵六','钱七'],
    'department':['HR','Engineering',"Marking","Finance","HR"]
}
df_employee=pd.DataFrame(employee_data)

salary_data={
    'employee_id':[101,102,104,105],
    'salary':[10000,12003,23000,10000]
}

df_salary=pd.DataFrame(salary_data)
#设置行索引

df=df_employee.set_index('employee_id').join(df_salary.set_index('employee_id'),how='inner')
print(df)

13、根据字段筛选数据

可以通过df.字段名、df[字段名]或df[['字段名']](此种方法可以拿取多列数据,并形成一个新的dataframe)

直接看代码

import pandas as pd
import numpy as np

df=pd.DataFrame(np.random.randint(0,150,size=(150,3)),
                columns=['math','python','english']
                )
print(df)
print(df.python)
print(df["math"])
print(df[['math']])
print(df[['math','python']])

14、根据标签筛选数据

通过loc进行操作  

import pandas as pd
import numpy as np

df=pd.DataFrame(np.random.randint(0,100,size=(10,3)),
                index=list('ABCDEFGHIG'),
                columns=['math','python','english']
                )
print(df.loc['A'])
print(df.loc[['A']])
print(df.loc[['A','B']])
print(df.loc[['A','B'],['math','python']])
print(df.loc['A':'F',['math','python']])
print(df.loc[:,['math','python']])
print(df.loc['B'::2])#从B开始隔一个取一个

 

  • 17
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的公寓报修管理系统,源码+数据库+毕业论文+视频演示 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本公寓报修管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此公寓报修管理系统利用当下成熟完善的Spring Boot框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的MySQL数据库进行程序开发。公寓报修管理系统有管理员,住户,维修人员。管理员可以管理住户信息和维修人员信息,可以审核维修人员的请假信息,住户可以申请维修,可以对维修结果评价,维修人员负责住户提交的维修信息,也可以请假。公寓报修管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 关键词:公寓报修管理系统;Spring Boot框架;MySQL;自动化;VUE
毕业设计,基于SpringBoot+Vue+MySQL开发的社区医院管理系统,源码+数据库+毕业论文+视频演示 信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古以来的短板,有效的提升管理的效率和业务水平。传统的管理模式,时间越久管理的内容越多,也需要更多的人来对数据进行整理,并且数据的汇总查询方面效率也是极其的低下,并且数据安全方面永远不会保证安全性能。结合数据内容管理的种种缺点,在互联网时代都可以得到有效的补充。结合先进的互联网技术,开发符合需求的软件,让数据内容管理不管是从录入的及时性,查看的及时性还是汇总分析的及时性,都能让正确率达到最高,管理更加的科学和便捷。本次开发的社区医院管理系统实现了病例信息、字典表、家庭医生、健康档案、就诊信息、前台、药品、用户、用户、用户表等功能。系统用到了关系型数据库中王者MySql作为系统的数据库,有效的对数据进行安全的存储,有效的备份,对数据可靠性方面得到了保证。并且程序也具备程序需求的所有功能,使得操作性还是安全性都大大提高,让社区医院管理系统更能从理念走到现实,确确实实的让人们提升信息处理效率。 关键字:社区医院管理系统;信息管理,时效性,安全性,MySql
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值