python 08Pandas

news/2025/1/16 10:56:59/

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文件,有时需要删除行号


http://www.ppmy.cn/news/1413366.html

相关文章

Java并发编程和JUC

Java并发编程、JUC&#xff08;java.util.concurrent包&#xff09; 参考&#xff1a;JUC详解 概念辨析 进程、线程、管程 进程 进程&#xff1a;进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。 它是操作系统动态执行的基本单元&#xff0c;是操作系统…

2024.04.10嵌入式第一天

# 前言 2024年4月10号也算是有纪念意义的一天吧&#xff0c;什么纪念意义呢&#xff1f;前面博客可能也说过&#xff0c;本人经历过两年前端&#xff0c;然后因为一些不可控的原因转为java后端一年&#xff0c;然后前段时间因为一些原因接触了解了嵌入式这个行业&#xff0c;所…

[leetcode] all-nodes-distance-k-in-binary-tree 二叉树中所有距离为 K 的结点

. - 力扣&#xff08;LeetCode&#xff09; 给定一个二叉树&#xff08;具有根结点 root&#xff09;&#xff0c; 一个目标结点 target &#xff0c;和一个整数值 k 。 返回到目标结点 target 距离为 k 的所有结点的值的列表。 答案可以以 任何顺序 返回。 示例 1&#xff1a…

【AcWing】蓝桥杯集训每日一题Day20|线性DP|312.乌龟棋(C++)

312.乌龟棋 312. 乌龟棋 - AcWing题库难度&#xff1a;简单时/空限制&#xff1a;1s / 64MB总通过数&#xff1a;5184总尝试数&#xff1a;8091来源&#xff1a;《算法竞赛进阶指南》NOIP2010提高组算法标签DP线性DP 题目内容 小明过生日的时候&#xff0c;爸爸送给他一副乌龟…

堆 和 优先级队列

目录 一、堆 二、优先级队列 1、初识优先级队列 2、实现一个优先级队列 3、PriorityQueue &#xff08;1&#xff09;实现了Comparable接口&#xff0c;重写了compareTo方法 &#xff08;2&#xff09;实现了Comparator接口&#xff0c;重写了compare方法 4、 Prio…

AWD靶机实战第二天:使用python脚本获取flag

上一部分我们通过读源码和利用源码审计的工具找到了这个漏洞&#xff0c;但是在比赛的时候有很多靶机&#xff0c;我们去一个个的注册&#xff0c;一个个的登录然后输入很浪费时间&#xff0c;所以我选择写一个python脚本来实现自动获得flag以及自动提交flag. 首先我们将这次的…

心跳机制原理学习

心跳机制 应用场景&#xff1a; 在长连接下&#xff0c;有可能很长一段时间都没有数据往来。理论上说&#xff0c;这个连接是一直保持连接的&#xff0c;但是实际情况中&#xff0c;如果中间节点出现什么故障是难以知道的。更要命的是&#xff0c;有的节点&#xff08;防火墙…

Vue - 4( 8000 字 Vue 入门级教程)

一&#xff1a; Vue 初阶 1.1 关于不同版本的 Vue Vue.js 有不同版本&#xff0c;如 vue.js 与 vue.runtime.xxx.js&#xff0c;这些版本主要针对不同的使用场景和需求进行了优化&#xff0c;区别主要体现在以下几个方面&#xff1a; 完整版 vs 运行时版&#xff1a; vue.js&…