当前位置: 首页 > news >正文

python 08Pandas

1.基础概念

2.基本操作

(1)加载数据集

import pandas as pd  #引入pandas包

打开csv文件

df = pd.read_csv('./data/gapminder.tsv',sep='\t')  #\t制表符,即tab,缩进四个字符  \n表示回车换行
print(type(df))
print(df.head())  #显示前5行  默认将列表的第一列设置为列标签,即取完之后的数据其实是从原始列表的第二列开始的

<class 'pandas.core.frame.DataFrame'>
       country continent  year  lifeExp       pop   gdpPercap
0  Afghanistan      Asia  1952   28.801   8425333  779.445314
1  Afghanistan      Asia  1957   30.332   9240934  820.853030
2  Afghanistan      Asia  1962   31.997  10267083  853.100710
3  Afghanistan      Asia  1967   34.020  11537966  836.197138
4  Afghanistan      Asia  1972   36.088  13079460  739.981106

print(df.tail())  #显示最后5行
print(type(df))  #df为DataFrame类型
print(df.shape)  #shape是DataFrame的属性,而不是方法,注意没有()
print(df.columns) #查看数据的列名,相当于数据库的字段名
print(type(df.columns))
print(list(df.columns)) #可以转换为list


(2)获取列子集

country_df = df['country']  #获取一列
print(country_df.head())
print(type(country_df))  #contry_df为Series类型,pandas的列为series类型
country_df = df[['country','year']] #获取制定多列,注意 里面是list 两层[],可以理解为df获取列的参数是某一列,或者是多列组成的一个Listprint(country_df.head())
print(type(country_df))


(3)获取行子集

通过索引标签获取行(注意与iloc的区别)

print(df.head())
print(df.loc[0]) #通过索引值取得行
print(type(df.loc[0]))  #注意,取得一行的时候,结果是Series
print(df.loc[2:5])  #同list和numpy的切片操作

可以使用tail()返回最后一行

print(df.tail(n=5))   #n为选取的数量,修改为2试试

选取多行

print(df.loc[[0,1,3]])   #里面是list,两层[],同上df取多列
print(df.tail())
print(df.iloc[[-2,-1]])


(4)混合获取

使用loc获取列子集

subset = df.loc[:,['year','pop']]  #同numpy的二维操作,行通过:取全部,列通过一个list取得特定的列 修改行的值试试,去特定几行
print(subset.head())
subset = df.iloc[:,[2,3,-2,-1]]  #负值索引,同list,忘记的回去复习巩固
print(subset.head())

通过范围选择列子集

m=list(range(0,2))  #想先之前学过的,范围包含第一个值,不包含第二个值
print(m)
print(df.iloc[:,m].head())

通过切片选择列子集

subset = df.iloc[:,0:6:2] #带步长,跟list一样
print(subset)

获取行和列的子集

print(df.loc[2,'year'])  #loc注意是索引值

获取多行和多列的子集

print(df.loc[[0,99,999],['country','year']])  #这里与numpy的二维数组取多行多列区别开


(5)分组和聚合计算

print(df.groupby('year')['lifeExp'].mean())  #按年份分组计算平均值

3.Pandas数据结构

(1)创建series

Series
Series是 一维 容器,类似于python 的list。
DataFrame可以看作由Series对象组成的字典,其中每个键是列名,值是Series

import pandas as pd
s = pd.Series(['banana',42])  #默认索引
print(type(s))
print(s)
s = pd.Series(['banana',42],index=['食物','数量'])  #指定索引
print(s)


(2)创建DataFrame

scientists = pd.DataFrame({'name':['Franklin','William Gosset'],'Age':[37,61]})
print(scientists)
scientists = pd.DataFrame(data={'Occupation':['chemist','statistician'],'Born':['1920','1876'],'Died':['1958','1937'],'Age':[37,61]},index=['Rosaline Franklin','William Gosset'],  #把此行注销掉试试看columns=['Occupation','Born','Died','Age']
)   #必须与data里的一致print(scientists)


(3)series操作


(4)series数据操作

布尔子集:Series
用于取数据子集的行索引或列索引往往不确定,通常需要寻求满足(或不满足)特定计算或观测值的值

scientists = pd.read_csv('./data/scientists.csv')
print(scientists)
print(scientists.shape)

ages = scientists['Age']
print(ages)

使用describe()方法获取基本统计量

ages.describe()

操作自动对齐和向量化
许多Series方法都是 向量化 的,这些方法会 同时 处理整个向量,而不用使用for循环

对向量的操作会根据索引进行,缺失值用NaN表示

带有常见索引标签的向量(自动对齐)

DataFrame操作

导出和导入数据

保存数据

names=scientists['Name']
print(names)
names.to_pickle('./data/scientist_names_)series.pikle')  #保存成pickle文件,用二进制格式保存数据,节省磁盘空间  .p .pkl也可
scientist_from=pd.read_pickle('./data/scientist_names_)series.pikle')
print(scientist_from)
scientist.to_csv('./data/scientist_no_index.csv',index=False)

 对于CSV文件,有时需要删除行号

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 想做产品经理,应该选择什么专业?
  • 【汇编】_Visual Studio2019写32位汇编
  • 解码AAC裸流为PCM写入文件
  • [数据结构]双向带头循环链表制作
  • rust-tokio发布考古
  • 少儿编程 2024年3月电子学会图形化编程等级考试Scratch二级真题解析(判断题)
  • 函数重载和引用【C++】
  • Unity类银河恶魔城学习记录12-7-2 p129 Craft UI - part 2源代码
  • git lfs如何使用
  • AI-漫画推文
  • 二维数组及其内存图解
  • 云手机提供私域流量变现方案
  • 如何在Java中创建对象输入流
  • WPF Pack
  • C# 字符串和枚举类型互相转换
  • hexo+github搭建个人博客
  • 【RocksDB】TransactionDB源码分析
  • ES6系列(二)变量的解构赋值
  • go append函数以及写入
  • nodejs实现webservice问题总结
  • Python爬虫--- 1.3 BS4库的解析器
  • python学习笔记-类对象的信息
  • 从tcpdump抓包看TCP/IP协议
  • 驱动程序原理
  • 入手阿里云新服务器的部署NODE
  • 使用docker-compose进行多节点部署
  • 算法之不定期更新(一)(2018-04-12)
  • 探索 JS 中的模块化
  • 想写好前端,先练好内功
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ‌前端列表展示1000条大量数据时,后端通常需要进行一定的处理。‌
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #AngularJS#$sce.trustAsResourceUrl
  • (11)MSP430F5529 定时器B
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (C11) 泛型表达式
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (学习日记)2024.01.19
  • (一)、python程序--模拟电脑鼠走迷宫
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .NET Core 成都线下面基会拉开序幕
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明
  • .netcore 获取appsettings
  • .NET编程C#线程之旅:十种开启线程的方式以及各自使用场景和优缺点
  • .net实现头像缩放截取功能 -----转载自accp教程网
  • .net中的Queue和Stack
  • .pub是什么文件_Rust 模块和文件 - 「译」
  • //TODO 注释的作用
  • /dev下添加设备节点的方法步骤(通过device_create)