一、pandas数据结构–DataFrame

  • DataFrame 是表格型的数据结构,每列值的数据类型可以不同,也可以相同
    DataFrame 常用于二维数据。
    DataFrame 的属性: values,index,columns,dtypes

二、创建DataFrame对象

1.格式:pandas.DataFrame(data[,index[,columns]])

  • 参数说明:
    data:是输入给DataFrame构造器的数据 index:是DataFrame对象中行索引的标签。 columns:是DataFrame对象中列索引的标签。
    可以通过DataFrame的属性index、values和columns。
    1.获取DataFrame对象所有列的名称. 对象名.columns
    2.获取DataFrame对象的索引列表,对象名.index
    3.获取存储在数据结构中的所有元素(值),对象名.values

2.随机数生成DataFrame对象,使用默认索引。

import numpy as np
import pandas as pd
#设置输出结果列对齐
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)
#在[1,20]区间上生成5行3列15个随机数
#使用index参数指定索引(默认从0开始),columns参数指定每列标题
df = pd.DataFrame(np.random.randint(1, 20, (5,3)),index=range(5),columns=('A', 'B', 'C'))
#print(df,df.values,df.index,df.columns,sep='\n\n')

3.随机数生成DataFrame对象,使用时间序列作为索引

# 模拟2020年7月15日某超市熟食、化妆品、日用品每小时的销量
# 使用时间序列作为索引
df = pd.DataFrame(np.random.randint(5, 15, (10, 3)),index=pd.date_range(start='202007150900',end='202007151800',freq='H'),columns=['熟食', '化妆品', '日用品'])
#print(df,df.values,df.index,df.columns,sep='\n\n')

4.用字典创建DataFrame对象 使用姓名字符串做索引

df = pd.DataFrame({'语文':[87,79,67,92],'数学':[93,89,80,77],'英语':[90,80,70,75]},index=['张三', '李四', '王五', '赵六'])
#print(df,df.values,df.index,df.columns,sep='\n\n')

5.嵌套字典创建DataFrame对象.
外部的键生成列名称,内部的键生成索引标签。

df = pd.DataFrame({'张三':{'数学':67,'程序设计':78},'杨下':{'物理':78,'程序设计':99},'冒瞳':{'数学':56,'实习':67}})
print(df,df.values,df.index,df.columns,sep='\n\n')

运行结果:

         张三  杨下  冒瞳
数学      67.0   NaN  56.0
程序设计  78.0  99.0   NaN
物理       NaN  78.0   NaN
实习       NaN   NaN  67.0[[67. nan 56.][78. 99. nan][nan 78. nan][nan nan 67.]]Index(['数学', '程序设计', '物理', '实习'], dtype='object')Index(['张三', '杨下', '冒瞳'], dtype='object')

6.用由Series组成的字典生成DataFrame对象

df = pd.DataFrame({'product':pd.Series(['电视机','手机','空调']),'price':pd.Series([6500,3400,7899]),'count':[23,45,28]})
df1 = pd.DataFrame({'product':['电视机','手机','空调'],'price':[6500,3400,7899],'count':[23,45,28]})
print(df,df1,sep='\n\n')#可以对字典进行部分选择,生成DataFrame对象
dt = {'product':['电视机','手机','空调'],'price':[6500,3400,7899],'count':[23,45,28]}#生成由'product'与'count'为列的DataFrame对象
df1 = pd.DataFrame(dt,columns=['product','count'])
print('\n',df1)

运行结果:

  product  price  count
0  电视机   6500     23
1    手机   3400     45
2    空调   7899     28product  price  count
0  电视机   6500     23
1    手机   3400     45
2    空调   7899     28product  count
0  电视机     23
1    手机     45
2    空调     28

三、DataFrame数据中的元素选择

1.查看前n行、后n行数据 : 函数head()与tail()的使用

df = pd.DataFrame({'语文':[87,79,67,92,67,87,54],'数学':[93,89,80,77,56,78,69],'英语':[90,80,70,75,75,34,85]},index=['张三', '李四', '王五', '赵六','王冠','张一','吴玉'])
print('查看全部数据'.center(20,'='))
#print(df,'\n')#查看前n行、后n行数据 : 函数head()与tail()的使用
print('查看前5行的数据'.center(20,'='))
#print(df.head(5),df.head(),sep='\n\n')     #不带参数,默认为 5print('查看后3行的数据'.center(20,'='))
#print(df.tail(3),df.tail(),sep='\n\n')     #不带参数,默认为 5

2.利用列名访问一列的数据

#利用列名访问一列的数据
print('\n',df)print('利用[列名]访问整列的数据'.center(20,'='))
print(df['语文'].head(2))  print("df.列名 与 df['列名'] 访问相同".center(30,'='))
print(df['语文'],df.语文,sep='\n')#利用[列名,列名,...]访问多列的数据
print('利用[列名,列名,...]访问多列的数据'.center(26,'='))
print(df[ ['语文','英语'] ].tail(6))

运行结果:

       语文  数学  英语
张三    87    93    90
李四    79    89    80
王五    67    80    70
赵六    92    77    75
王冠    67    56    75
张一    87    78    34
吴玉    54    69    85===利用[列名]访问整列的数据====
张三    87
李四    79
Name: 语文, dtype: int64====df.列名 与 df['列名'] 访问相同=====
张三    87
李四    79
王五    67
赵六    92
王冠    67
张一    87
吴玉    54
Name: 语文, dtype: int64===利用[列名,列名,...]访问多列的数据===语文  英语
李四    79    80
王五    67    70
赵六    92    75
王冠    67    75
张一    87    34
吴玉    54    85

3.访问指定信息

#访问指定信息的所有信息,如显示"吴玉"的所有成绩
# 条件查询,通过行索引访问。
print('显示吴玉的所有成绩'.center(30,'='))
print(df[df.index=='吴玉'])
print('显示王冠的所有成绩'.center(30,'='))
print(df[df.index=='王冠'])
print('显示赵六的所有成绩'.center(30,'='))
print(df[df.index=='赵六'])

4.新增或修改一条列数据

# 新增一条列数据,新增数据需与原数据的行个数匹配。否则会ValueError抛出异常
df['python'] = [78,54,89,76,56,45,87]  #若索引不存在,新增一条数据
df['语文'] = [100,100,100,100,100,100,100]          #若索引存在,修改数据
print(df)

5.新增或修改一条行数据

# 用loc函数(查询),直接插入一行
print('新增 于一 的所有的成绩'.center(29,'='))
df.loc['于一'] = [66,45,88,99]    #若索引不存在,新增一条数据
df.loc['赵六'] = [99,99,99,99]   #若索引存在,修改数据
print(df)

运行结果:

==========显示吴玉的所有成绩===========语文  数学  英语
吴玉    54    69    85
==========显示王冠的所有成绩===========语文  数学  英语
王冠    67    56    75
==========显示赵六的所有成绩===========语文  数学  英语
赵六    92    77    75语文  数学  英语  python
张三   100    93    90      78
李四   100    89    80      54
王五   100    80    70      89
赵六   100    77    75      76
王冠   100    56    75      56
张一   100    78    34      45
吴玉   100    69    85      87=========新增 于一 的所有的成绩========语文  数学  英语  python
张三   100    93    90      78
李四   100    89    80      54
王五   100    80    70      89
赵六    99    99    99      99
王冠   100    56    75      56
张一   100    78    34      45
吴玉   100    69    85      87
于一    66    45    88      99

6.利用切片访问一行或多行的数据

#利用切片访问一行或多行的数据
print('利用切片访问一行或多行的数据'.center(26,'='))
print(df[:1],df[3:6],sep='\n\n')
#利用索引访问指定的元素
print(df['数学'][6])

运行结果:

======利用切片访问一行或多行的数据======语文  数学  英语  python
张三   100    93    90      78语文   数学  英语   python
赵六    99    99    99      99
王冠   100    56    75      56
张一   100    78    34      4569

7.利用切片访问多行多列数据

print('利用切片访问多行多列数据'.center(26,'='))
#print(df[ ['语文','python','数学'] ][2:5])
#print(df[2:5][ ['语文','python','数学'] ])

运行结果:

=======利用切片访问多行多列数据=======语文  python  数学
王五   100      89    80
赵六    99      99    99
王冠   100      56    56语文  python  数学
王五   100      89    80
赵六    99      99    99
王冠   100      56    56

8.利用 loc,iloc 进行访问或修改指定信息

'''
loc[行索引名称或条件,列索引名称]
iloc[行索引位置,列索引位置] 或 iloc[行索引位置] 即 iloc使用数字做索引
'''
print(df)
print('索引为5的行 iloc[5]'.center(40,'='))
print(df.iloc[5])print('索引为[3:5]的行 iloc[3:5]'.center(40, '='))
print(df.iloc[3:5])print('索引为[3:5]的行且列为0:2的所有数据'.center(40, '='))
print(df.iloc[3:5,0:2])print('访问指定行(0,3,5)指定列(0,2)的数据'.center(40, '='))
print(df.iloc[[0,3,5],[0,2]])print('访问"于一"的语文与python成绩'.center(40, '='))print(df)
print('修改行索引为5的值 iloc[5]'.center(40,'='))
df.iloc[5]=[100,65,99,99]   #修改行索引为5的值
print(df.iloc[5])print('修改索引为[3:5]的行的数据 iloc[3:5]'.center(40, '='))
df.iloc[3:5]=100      #索引为[3:5]所有数据都被修改为100
print(df.iloc[3:5])print('将python成绩乘以0.7'.center(40, '='))
df.语文 =df.语文*0.7
print(df)print('将"吴玉"成绩都加10'.center(40, '='))
df.loc['吴玉'] =df.loc['吴玉']+10

运行结果:

      语文  数学  英语  python
张三   100    93    90      78
李四   100    89    80      54
王五   100    80    70      89
赵六    99    99    99      99
王冠   100    56    75      56
张一   100    78    34      45
吴玉   100    69    85      87
于一    66    45    88      99
=============索引为5的行 iloc[5]=============
语文      100
数学       78
英语       34
python     45
Name: 张一, dtype: int64
==========索引为[3:5]的行 iloc[3:5]==========语文  数学  英语  python
赵六    99    99    99      99
王冠   100    56    75      56
=========索引为[3:5]的行且列为0:2的所有数据==========语文  数学
赵六    99    99
王冠   100    56
========访问指定行(0,3,5)指定列(0,2)的数据=========语文  英语
张三   100    90
赵六    99    99
张一   100    34
===========访问"于一"的语文与python成绩===========语文  数学  英语  python
张三   100    93    90      78
李四   100    89    80      54
王五   100    80    70      89
赵六    99    99    99      99
王冠   100    56    75      56
张一   100    78    34      45
吴玉   100    69    85      87
于一    66    45    88      99
===========修改行索引为5的值 iloc[5]============
语文      100
数学       65
英语       99
python     99
Name: 张一, dtype: int64
=======修改索引为[3:5]的行的数据 iloc[3:5]========语文  数学  英语  python
赵六   100   100   100     100
王冠   100   100   100     100
=============将python成绩乘以0.7=============语文  数学  英语  python
张三  70.0    93    90      78
李四  70.0    89    80      54
王五  70.0    80    70      89
赵六  70.0   100   100     100
王冠  70.0   100   100     100
张一  70.0    65    99      99
吴玉  70.0    69    85      87
于一  46.2    45    88      99
==============将"吴玉"成绩都加10===============语文   数学   英语  python
张三  70.0   93.0   90.0    78.0
李四  70.0   89.0   80.0    54.0
王五  70.0   80.0   70.0    89.0
赵六  70.0  100.0  100.0   100.0
王冠  70.0  100.0  100.0   100.0
张一  70.0   65.0   99.0    99.0
吴玉  80.0   79.0   95.0    97.0
于一  46.2   45.0   88.0    99.0

9.筛选符合条件的数据

# 筛选语文低于60的成绩
df1 = df[df.语文<60]
df11 = df[df['语文']<60]
print(df1,df11,sep='\n\n')
# 筛选语文和python都低于60的信息
df2 = df[(df.语文<60) & (df.python<60)]
print(df2)

运行结果:

      语文  数学  英语  python
于一  46.2  45.0  88.0    99.0语文  数学  英语  python
于一  46.2  45.0  88.0    99.0Empty DataFrame
Columns: [语文, 数学, 英语, python]
Index: []

10.插入数据的操作方法

import pandas as pd
#利用列表生成DataFrame对象
df1 = pd.DataFrame([['张一','男',20],['五十','男',22],['吴下','男',18],['刘苛玉','女',19]],columns=['姓名','性别','年龄'])print("在最后新增一列".center(30,'='))
print("在数据框最后加上 ‘籍贯’一列")# 增加列的元素个数要跟原数据列的个数一样
df1['籍贯']=['江苏','河南','江苏','浙江']
print(df1)#在指定的位置增加一列 用insert()
print("在指定位置新增列:用insert()".center(30,'='))# 如在’性别‘之后增加一列’班级‘。可以用insert的方法
# 语法格式:列表.insert(index, obj)
# index :对象 obj 需要插入的索引位置。
# obj : 要插入列表中的对象(列名)df1.insert(2,'班级',['英才1901']*4)
print(df1)

运行结果:

===========在最后新增一列============
在数据框最后加上 ‘籍贯’一列姓名 性别  年龄  籍贯
0    张一   男    20  江苏
1    五十   男    22  河南
2    吴下   男    18  江苏
3  刘苛玉   女    19  浙江=====在指定位置新增列:用insert()=====姓名 性别      班级  年龄  籍贯
0    张一   男  英才1901    20  江苏
1    五十   男  英才1901    22  河南
2    吴下   男  英才1901    18  江苏
3  刘苛玉   女  英才1901    19  浙江

大家伙学会了吗?记得一键三连哦~
三克斯~ O(∩_∩)O哈哈~

Python数据分析——pandas数据结构(DataFrame)相关推荐

  1. Python数据分析pandas之dataframe初识

    Python数据分析pandas之dataframe初识 声明与简介 pandas是一个基于python的.快速的.高效.灵活.易用的开源的数据处理.分析包(工具)..pandas构建在numpy之上 ...

  2. Python数据分析pandas之分组统计透视表

    Python数据分析pandas之分组统计透视表 数据聚合统计 Padans里的聚合统计即是应用分组的方法对数据框进行聚合统计,常见的有min(最小).max(最大).avg(平均值).sum(求和) ...

  3. Python数据分析pandas之数据拼接与连接

    Python数据分析pandas之数据拼接与连接 数据拼接处理 数据拼接处理指的是numpy.pandas里对数据的拼接.连接.合并等多种方法的概称.有时我们处理的数据会分很多步骤,而中间或者最终的结 ...

  4. Python数据分析pandas之series初识

    Python数据分析pandas之series初识 声明与简介 pandas是一个基于python的.快速的.高效.灵活.易用的开源的数据处理.分析包(工具)..pandas构建在numpy之上,它通 ...

  5. Python数据分析pandas之多层高维索引

    Python数据分析pandas之多层高维索引 DataFrame多层索引 多层索引简介 众所周知Pandas的Series和DataFrame存放的是一维和二维数组,那么想存放多维数组就得通过多层索 ...

  6. Python数据分析——Pandas基础:dt.datetime与pivot_table()数据透视表

    系列文章目录 Chapter 1:创建与探索DF.排序.子集化:Python数据分析--Pandas基础入门+代码(一) Chapter 2:聚合函数,groupby,统计分析:Python数据分析- ...

  7. Python数据分析实战-提取DataFrame(Excel)某列(字段)最全操作(附源码和实现效果)

    实现功能: Python数据分析实战-提取DataFrame(Excel)某列(字段)最全操作,代码演示了单列提取和多列提取两种情况,其中单列提取有返回series格式和dataframe两种情况,在 ...

  8. python使用pandas计算dataframe中每个分组的分位数极差、分组数据的分位数极差(range)、使用groupby函数和agg函数计算分组的两个分位数

    python使用pandas计算dataframe中每个分组的分位数极差.分组数据的分位数极差(range).使用groupby函数和agg函数计算分组的两个分位数 目录

  9. python使用pandas计算dataframe中每个分组的极差、分组数据的极差(range)、使用groupby函数和agg函数计算分组的最大值和最小值

    python使用pandas计算dataframe中每个分组的极差.分组数据的极差(range).使用groupby函数和agg函数计算分组的最大值和最小值 目录

最新文章

  1. 7.某计算机的控制器采用微程序控制方式,微指令中的操作控制字段的16位采用混合表示法,其中用11位采用直接表示法,另外5位分为3位和2位的编码表示法,则此格式的微指令最多可表示多少个微指令?
  2. 【转】感知哈希算法——找出相似的图片
  3. c和python哪个好学-C/C++和Python哪个更有前景?
  4. Swap空间利用率不释放
  5. Spring Security源码解析(四)—— 过滤器
  6. PHP学习笔记(六)
  7. zedboard--zynq使用自带外设IP让ARM PS访问FPGA(八) 转载
  8. nginx 4层代理配置
  9. 策略模式和职责链模式在CMS中的应用
  10. Golang高效实践之泛谈篇
  11. ESP8266热点配网-Arduino代码分享
  12. 计算机网络基础期末试题,计算机网络基础期末考试试题
  13. jQuery插件的简单使用及制作
  14. DeepMind 联合创始人加盟 Google AI【智能快讯】
  15. 客户关系管理 期末复习
  16. (网络)网络层:IP协议解析、地址管理(IP地址、子网掩码)、路由选择
  17. 凌晨3点不回家-现实版
  18. DC-DC电源模块的九个主要性能指标和作用
  19. PVE安装ros系统
  20. 云服务器deeplearning_吴恩达deeplearning.ai将于11月6日开放第四课,主讲卷积神经网络...

热门文章

  1. Laravel composer包-webUpload制作过程
  2. php上传图片代码编辑,simditor上传本地图片 php
  3. 网页抓取公式实例之船舶定位
  4. 护航中小企业 H3C F100-C-A5防火墙微评测
  5. 创建一个考试管理系统
  6. Android App开发实战项目之仿喜马拉雅的听说书App实现(超详细 附源码和演示视频)
  7. 华为OD软件工程师面试总结
  8. 【干货】套利定价理论
  9. 深入理解Java虚拟机-走近Java
  10. 【基于唯品会MP平台】集群环境下session共享技术方案及分布式单点登录