二维数据,Series容器,既有行索引,又有列索引

1. 创建DataFrame

1.1 通过list 创建DataFrame

需要指定 data,index 行,columns 列

指定data和index/columns是list类型或者 np.arange

df1 = pd.DataFrame(data=[[1, 2, 3], [11, 12, 13]], index=['r_1', 'r_2'], columns=['A', 'B', 'C'])
df2 = pd.DataFrame(data=[[1], [11]], index=['r_1', 'r_2'], columns=['A'])
df3 = pd.DataFrame(data=np.arange(12).reshape(3, 4), index=list("abc"), columns=list("ABCD"))
复制代码

A B C

r_1 1 2 3 r_2 11 12 13


​ A r_1 1 r_2 11


A B C D a 0 1 2 3 b 4 5 6 7 c 8 9 10 11

1.2 通过字典,创建DataFrame

1.2.1 方式一:传入单个字典, 注意必须是一键多值(单值的时候,也必须加上[])

dict = {"name": ["jack", "HanMeimei"], "age": ["100", "100"]}
# dict = {"name": "jack", "age": "100"}#这样写是会报错的
# dict = {"name":["jack"], "age": ["100"]}#如果是单值,必须加[]
df3 = pd.DataFrame(dict, index=list("ab"))
复制代码

age age1 name

a 100.0 NaN MaYun1 b 100.0 NaN MaYun2 c NaN 100.0 MaYun3

1.2.2 方式二: 传入字典列表,每一个字典是一行数据,缺少的列会补充nan

dict = [{"name": "MaYun1", "age": 100}, {"name": "MaYun2", "age": 100}, {"name": "MaYun3", "age1": 100}]
# dict = {"name": "jack", "age": "100"}
df4 = pd.DataFrame(dict, index=list("abc"))
复制代码

2. DataFrame基本属性

dict = {"name": ["jack", "HanMeimei", "Lucy"], "age": ["100", "90","98"], "salary": [30000, 50000, 999000]}
df5 = pd.DataFrame(dict)
print(df5)
print(df5.head(1))
print(df5.tail(1))
print(df5.info())
print(df5.index)
print(df5.columns)
print(df5.values)
print(df5.describe())
复制代码

3. 所有数据按照指定列排序

df5 = df5.sort_values(by='salary', ascending=True)
print(df5)
复制代码

4. DataFrame简单行、列切片

dict = {"name": ["jack", "HanMeimei", "Lucy","Mr Green", "Mrs Han", "Lily"],"age": [100, 90,98,90,100,30], "salary": [30000, 50000, 999000,90000,80000,75000]}
df6 = pd.DataFrame(dict)
print(df6)# 取出前五行
print(df6[0:5])
# 取出name列
print(df6["name"])
# 取出前三行的name列
print(df6[0:3]["name"])
复制代码

5. loc 行、列切片

5.2 *记住下面的这一个就行了,记太多反而麻烦

基本格式为:

df7.loc[行,列]
复制代码

如果取连续的行或者列---使用切片 :

如果取出来不连续的行或列—使用列表 [ ]

其中 切片和列表可以混合使用

举列:

5.5.1 连续多行多列

df7.loc['a':'c','name':'age']注意:包含了b行,因为是行切片
>       name  age
a       jack  100
b  HanMeimei   90
c       Lucy   98
复制代码

5.5.2 不连续多行+连续多列

df7.loc[['a','c'],'name':'salary']
注意:行是不连续选择,只是a和c列是连续切片,包含了中间的age
>   name  age  salary
a  jack  100   30000
c  Lucy   98  999000
复制代码

5.5.3 不连续多行+不连续多列

df7.loc[['a','c'],['name','salary']]
注意:行是不连续选择,只是a和c列也是不连续选择,只是name和salary
>    name  salary
a  jack   30000
c  Lucy  999000
复制代码

5.5.4 全部行+不连续多列(全部列同理)

df7.loc[:,['name','salary']]
注意:只要把行写个空切片就行   :
>        name  salarya       jack   30000b  HanMeimei   50000c       Lucy  999000d   Mr Green   90000e    Mrs Han   80000f       Lily   75000
复制代码

5.5.5 不连续多行+单列(单行同理)

df7.loc[['a','c'],'name']
注意:单列名没加[],结果是个Series
>    a    jackc    LucyName: name, dtype: object<class 'pandas.core.series.Series'>
复制代码
df7.loc[['a','c'],['name']]
type(df7.loc[['a','c'],['name']])
注意:单列名加[],结果是个DataFrame
>       namea  jackc  Lucy<class 'pandas.core.frame.DataFrame'>
复制代码

6. iloc 行、列切片

只是通过位置取值,原理与loc一样

只是注意,切片不包含最后一个数字,这点与loc不同

df7.iloc[[1,3],[0]]
> 取得不连续的行列name
b  HanMeimei
d   Mr Greendf7.iloc[1:3,0:1]
> 没包含3的d ,没包含1的agename
b  HanMeimei
c       Lucy
复制代码

7. 赋值更改数据

可以使用loc,也可以使用iloc

df7.iloc[1:3,1:3]=99999999
print(df7)
>       name       age    salary
a       jack       100     30000
b  HanMeimei  99999999  99999999
c       Lucy  99999999  99999999
d   Mr Green        90     90000
e    Mrs Han       100     80000
f       Lily        30     75000
复制代码

8.布尔索引

一起看个例子吧

创建一个dataframe

Score = {"姓名": ["张无忌", "赵敏", "小乔", "大乔", "杨玉环", "貂蝉", "西施", "王子", "姜子牙", "李白", "杜甫", "王伟","李晓雨"],"语文": [78, 90, 87, 88, 56, 94, 92, 85, 93, 91, 59, 100,100],"数学": [91, 59, 100, 75, 30, 95, 91, 59, 100, 10, 95, 85,100],"英语": [91, 59, 100, 75, 30, 95, 10, 95, 85, 75, 30, 95,100]}
df_score = pd.DataFrame(Score)
print(df_score)
复制代码

8.1 取出所有英语成绩大于90的人的数据

# 得到的是一个Series
loc_ = df_score.loc[:,"英语"] > 90
print(loc_)
print(type(loc_))# <class 'pandas.core.series.Series'>
# dataframe 布尔索引,会筛选出所有值为true的行
print(df_score[loc_])# 也可以简写为
print(df_score[df_score.loc[:,"英语"]>90])
复制代码

8.2 取出所有英语成绩小于90的人的数据(~)

注意:加 ~ 取反

print(df_score[~(df_score.loc[:, "英语"] > 90)])
复制代码

8.3 取出所有英语成绩大于90并且语文大于80人的数据

print(df_score[(df_score.loc[:, "英语"] > 90)&(df_score.loc[:, "语文"] < 80)])
复制代码

8.4 知识点截图

9. 字符串方法

# 创建一个dataframe
student = {"姓名": ["张无忌", "赵敏", "小乔", "大乔", "杨玉环", "貂蝉", "西施", "王子", "姜子牙", "李白", "杜甫", "王伟", "李晓雨"],"语文": [78, 90, 87, 88, 56, 94, 92, 85, 93, 91, 59, 100, 100],"数学": [91, 59, 100, 75, 30, 95, 91, 59, 100, 10, 95, 85, 100],"英语": [91, 59, 100, 75, 30, 95, 10, 95, 85, 75, 30, 95, 100],"班级": ["一年级3班", "一年级1班", "二年级3班", "二年级1班", "一年级13班", "三年级7班", "五年级3班", "四年级3班", "一年级5班", "一年级7班", "一年级4班","一年级9班", "一年级10班"],}
df_student = pd.DataFrame(student)
print(df_student)
复制代码

9.1 len—选择【班级】列元素字符串长度大于5的数据

print(df_student[df_student["班级"].str.len() > 5])
复制代码

9.2 replace—把【班级】列元素中的【年级】改为【学校一年级】

# 注意等号右侧返回一个Series,要把它赋值给原DataFrame对应的列
df_student["班级"] = df_student["班级"].str.replace("一年级", "学校一年级")
print(df_student)
# 下面是取列的loc用法
df_student.loc[:,"班级"] = df_student.loc[:,"班级"].str.replace("一年级", "学校一年级")
复制代码

9.3 contains—筛选【班级】列包含“学校”和“1”的数据

print(df_student[(df_student["班级"].str.contains("学校"))&(df_student["班级"].str.contains("1"))])
复制代码

9.4 split—切割字符串

9.5 get—打印学生姓名的第一个字符(姓氏)

print((df_student["姓名"].str.get(0)))
复制代码

9.6 match—正则表达式匹配,找出姓名包含'王|李'的数据

reg = '王|李'
print(df_student[df_student["姓名"].str.match(reg)])
复制代码

9.7 pad—填充字符*

# 注意width=10表示,现在的字符+要填充的*,一起计算宽度为10
# 两侧都加*,最后得到的字符串长度为10,不足用*添加(也可以不写side,直接使用center函数)
df_student["姓名"] = df_student["姓名"].str.pad(width=10, side='both', fillchar='*')
# 右侧都加—,最后得到的字符串长度为20,不足用-添加
df_student["姓名"] = df_student["姓名"].str.pad(width=20, side='right', fillchar='-')
print(df_student)
复制代码

9.5 知识点截图

10. 新增一列统计总分 apply方法

10.1 直接相加

df_student["总分"] = df_student["语文"] + df_student["数学"] + df_student["英语"]
复制代码

10.2 使用Series的apply方法遍历(apply传入一个函数,更强大)

df_student['总分'] = pd.Series(df_student.index.tolist()).apply(lambda i: df_student.loc[i, "语文"] + df_student.loc[i, "数学"] + df_student.loc[i, "英语"])# 1.为了使用Series的apply方法,根据DataFrame的Index生成一个Series,
pd.Series(df_student.index.tolist())
# 2.后面是一个lambda表达式,也可以定义函数传递进去(写函数就可以做很多处理了),见下例
复制代码
# 让语文大于90的人,让他的语文成绩再加上1000分,然后求总分
def sum1(i):if df_student.loc[i, "语文"] > 90:df_student.loc[i, "语文"] = df_student.loc[i, "语文"] + 1000return df_student.loc[i, "语文"] + df_student.loc[i, "数学"] + df_student.loc[i, "英语"]df_student['总分'] = pd.Series(df_student.index.tolist()).apply(lambda i: sum1(i))
复制代码

11. 缺失数据处理

# 使用numpy生成一组随机整数(在0~100之间,形状为5行7列)
rand = np.random.randint(0, 100, (5, 7))
# 使用numpy上传的数据生成DataFrame
df = pd.DataFrame(rand, columns=list("ABCDEFG"))
# 定义一些NaN
df.loc[0:3, "A":"B"] = np.nan
print(df)
复制代码

11.1 判断是不是NaN

11.1.1 判断整个df是不是Nan的情况

# 是null吗
print(pd.isnull(df))
结果是:DataFrame
复制代码

# 不是null吗
print(pd.notnull(df))
复制代码

11.1.2 判断df指定列是不是Nan的情况

# 打印A列里数据为NUll的数据
print(df[pd.isnull(df["A"])])
复制代码

# 打印A列里数据不为NUll的数据
print(df[pd.notnull(df["A"])])
复制代码

11.2 删除df里有nan的数据

# 不输入how参数,默认为any
# 只要有一个是NaN,就会删除该行
print(df.dropna(axis=0))
复制代码

# 只有全部是NaN,才会删除该行
print(df.dropna(axis=0,how="all"))
复制代码

Pandas之DataFrame详解相关推荐

  1. [Python3]pandas.merge用法详解

    摘要 数据分析与建模的时候大部分时间在数据准备上,包括对数据的加载.清理.转换以及重塑.pandas提供了一组高级的.灵活的.高效的核心函数,能够轻松的将数据规整化.这节主要对pandas合并数据集的 ...

  2. python echarts接口_python绘图pyecharts+pandas的使用详解

    pyecharts介绍 pyecharts 是一个用于生成 Echarts 图表的类库.Echarts 是百度开源的一个数据可视化 JS 库.用 Echarts 生成的图可视化效果非常棒 为避免绘制缺 ...

  3. blankcount函数python,Python pandas常用函数详解

    本文研究的主要是pandas常用函数,具体介绍如下. 1 import语句 2 文件读取 df = pd.read_csv(path='file.csv') 参数:header=None 用默认列名, ...

  4. pandas:案例详解 rename函数 修改列名和行名

    pandas:案例详解rename函数 修改列名和索引 rename函数简介 0 构建学习数据 1 修改索引两种方式 2 修改列名两种方式 3 是否替换原列表 3 pandas 字母转换大小写 3 使 ...

  5. pandas to_csv参数详解_【Python基础】Pandas数据可视化原来也这么厉害

    一.可视化概述 在Python中,常见的数据可视化库有3个: matplotlib:最常用的库,可以算作可视化的必备技能库,比较底层,api多,学起来不太容易. seaborn:是建构于matplot ...

  6. 数据分析:numpy和pandas基础操作详解

    数据处理基础 numpy基础 1.numpy创建数组及基础属性 2.数组的特点 3.创建常见数组 4.数组数据类型 5.生成随机数 6.一维数组索引 7.布尔索引 8. 多维数组的索引 9.实际问题 ...

  7. pandas的数据结构DataFrame详解

    python高级应用与数据分析学习笔记 12 1.DataFrame的创建方式 1.1 通过二维数组创建 import numpy as np import pandas as pd# 1.DataF ...

  8. pandas.read_csv参数详解

    读取CSV(逗号分割)文件到DataFrame 也支持文件的部分导入和选择迭代 更多帮助参见:http://pandas.pydata.org/pandas-docs/stable/io.html 参 ...

  9. pandas教程:pandas主要功能详解

    pandas基本功能 将文件数据导入Pandas 通过pandas提供的read_xxx相关的函数可以读取文件中的数据,并形成DataFrame,常用的数据读取方法为:read_csv,主要可以读取文 ...

最新文章

  1. 第1节 IMPALA:4、5、linux磁盘的挂载和上传压缩包并解压
  2. js(javascript)之浏览器控制台使用
  3. 【AI视野·今日CV 计算机视觉论文速览 第188期】Wed, 23 Dec 2020
  4. 赋能数据智慧,InfoBeat让业务跃动起来
  5. 奇妙的等式 精妙的证明(二)
  6. wp-autoblog_AutoBlog简介
  7. 事件元素JS的event对象--知识点总结
  8. 黑苹果卡在白苹果不动_从黑苹果到“白苹果”这一年我经历了什么
  9. android的wifi开发,android开发教程之wifi开发示例
  10. Flume+Kafka整合案例实现
  11. 人生性格分析02-60干支日
  12. 《Head First 设计模式》例子的C++实现(4 单件模式)
  13. 12v继电器驱动电路
  14. 微信公众平台开发(49)物联网硬件设备控制技术
  15. PlayStation5上手体验
  16. web前端 html+css+javascript游戏网页设计实例 (网页制作课作业)
  17. (Python)正则表达式(二)
  18. ol+天地图+geoserver_mapbox+GeoglobeJS天地图
  19. 【数据堂开放数据】活体检测数据免费开放
  20. 此情可待成追忆——九山顶畅游随想曲(九)

热门文章

  1. python笔试题奥特曼打怪兽_一个python面试笔试题
  2. ASEMI整流模块MSAD110-16图片,MSAD110-16体积
  3. 2016hctf Writeup.md
  4. c语言中include的作用,c语言include的用法是什么
  5. win10 mmdetection3d环境搭建
  6. DELL笔记本更换内存条
  7. 量化交易中的资金管理模型分享
  8. C语言 任意次方后的三位数
  9. 甘肃两地发生非洲猪瘟疫情 官方全面禁止泔水喂猪
  10. PDF转CAD怎么弄?PDF文件转换快速入门