Python常用库之二:Pandas

news/2024/11/10 9:06:56

Pandas是用于数据操纵和分析,建立在Numpy之上的。Pandas为Python带来了两种新的数据结构:Pandas SeriesPandas DataFrame,借助这两种数据结构,我们能够轻松直观地处理带标签数据关系数据

Pandas功能:

  • 允许为行和列设定标签
  • 可以针对时间序列数据计算滚动统计学指标
  • 轻松处理NaN值
  • 能够将不同的数据集合并在一起
  • 与Numpy和Matplotlib集成

Pandas Series

Pandas series 是像数组一样的一维对象,可以存储很多类型的数据。Pandas series 和 Numpy array之间的主要区别之一是你可以为Pandas series 中的每个元素分配索引标签;另一个区别是Pandas series 可以同时存储不同类型的数据。

创建 Pandas Series

pd.Series(data, index)

 

1 groceries = pd.Series(data=[30, 6, 'yes', 'No'], index=['eggs', 'apples', 'milk', 'bread'])
2 ser = pd.Series(data=[[0, 1, 2, 3], [1, 3, 5, 7], [2, 4, 6, 8]], index=(['a', 'b', 'c']))

 

查看 Pandas Series 属性

 1 # Pandas Series 元素数量
 2 print(groceries.size)
 3 # Pandas Series 形状
 4 print(groceries.shape)
 5 # Pandas Series 维度
 6 print(groceries.ndim)
 7 # Pandas Series 索引列表
 8 print(groceries.index)
 9 # Pandas Series 元素列表
10 print(groceries.values)

查看是否存在某个索引标签:in

1 print('book' in groceries)

 访问 Pandas Series 中元素

Pandas Series 提供了两个属性 .loc.iloc

.loc 表明我们使用的是标签索引访问

.iloc 表明我们使用的是数字索引访问

 1 # 标签索引
 2 print(groceries['eggs'])
 3 print(groceries[['eggs', 'milk']])
 4 # 数字索引
 5 print(groceries[1])
 6 print(groceries[[1, 2]])
 7 print(groceries[-1])
 8 # 明确标签索引
 9 print(groceries.loc['milk'])
10 print(groceries.loc[['eggs', 'apples']])
11 # 明确数字索引
12 print(groceries.iloc[0])
13 print(groceries.iloc[[0, 1]])

修改和删除 Pandas Series 中元素

直接标签访问,值修改就可

1 groceries['eggs'] = 2
2 print(groceries)

删除:drop(参数 1:lable,标签;参数 2:inplace=True/False,是/否修改原 Series)

1 print(ser.drop(['b']))
2 print(ser.drop(['a', 'b'], inplace=True))

Pandas Series 中元素执行算术运算

Pandas Series执行元素级算术运算:加、减、乘、除

fruits = pd.Series(data=[10, 6, 3], index=['apples', 'oranges', 'bananas'])
# 所有数字进行运算
print(fruits + 2)
print(fruits - 2)
print(fruits * 2)
print(fruits / 2)
# 所有元素应用Numpy中的数学函数
print(np.exp(fruits))
print(np.sqrt(fruits))
print(np.power(fruits, 2))
# 部分元素进行运算
print(fruits[0] - 2)
print(fruits['apples'] + 2)
print(fruits.loc['oranges'] * 2)
print(np.power(fruits.iloc[0], 2))

 Pandas DataFrame

Pandas DataFrame 是具有带标签的行和列的二维数据结构,可以存储多种类型的数据,类似于电子表格。

创建 Pandas DataFrame

第一步:创建 Pandas Series 字典

第二步:将字典传递给 pd.DataFrame

1 items = {'Bob': pd.Series(data=[245, 25, 55], index=['bike', 'pants', 'watch']),
2          'Alice': pd.Series(data=[40, 110, 500, 45], index=['book', 'glasses', 'bike', 'pants'])}
3 shopping_carts = pd.DataFrame(items)
4 print(shopping_carts)

通过关键字 columnsindex 选择要将哪些数据放入 DataFrame 中

1 shopping_cart = pd.DataFrame(items, index=['bike', 'pants'], columns=['Bob'])
2 print(shopping_cart)

 访问、添加、删除 DataFrame

访问整列:dataframe[['column1', 'column2']]

1 # 读取列
2 print(shopping_carts[['Bob', 'Alice']])

访问整行:dataframe.loc[['row1', 'row2']]

1 # 读取行
2 print(shopping_carts.loc[['bike']])

访问某行某列:dataframe['column']['row'],先提供行标签,将出错。

1 # 读取某一列某一行
2 print(shopping_carts['Bob']['bike'])

添加整列(末尾添加列),空值用 None

1 # 添加列
2 shopping_carts['Mike'] = [10, 30, 10, 90, None]

添加整行(末尾添加行),把新添加行创建为 dataframe,通过 append() 添加

1 # 添加行
2 new_items = [{'Alice': 30, 'Bob': 20,  'Mark': 35, 'Mike': 50}]
3 new_store = pd.DataFrame(new_items, index=['store3'])
4 shopping_carts = shopping_carts.append(new_store)

只能删除整列:pop('lable')

1 # 删除整列
2 shopping_carts.pop('Jey')

删除行或者列:drop(['lable1', 'lable2'], axis=0/1)  0表示行,1表示列

1 # 删除行
2 shopping_carts = shopping_carts.drop(['store3', 'watch'], axis=0)

更改行和列标签

rename()

1 # 更改列标签
2 shopping_carts = shopping_carts.rename(columns={'Bob': 'Jey'})
3 # 更改行标签
4 shopping_carts = shopping_carts.rename(index={'bike': 'hats'})

处理 NaN

统计 NaN 数量:isnull().sum().sum

1 # 数值转化为 True 或者 False
2 print(store_items.isnull())
3 # 每一列的 NaN 的数量
4 print(store_items.isnull().sum())
5 # NaN 总数
6 print(store_items.isnull().sum().sum())

统计非 NaN 数量:count(axis=0/1)

1 # 每一行非 NaN 的数量,通过列统计
2 print(store_items.count(axis=1))
3 # 每一列非 NaN 的数量,通过行统计
4 print(store_items.count(axis=0))

删除具有NaN值的行和列:dropna(axis=0/1, inplace=True/False)  inplace默认False,原始DataFrame不会改变;inplace为True,在原始DataFrame删除行或者列

1 # 删除包含NaN值的任何行
2 store_items.dropna(axis=0)
3 # 删除包含NaN值的任何列
4 store_items.dropna(axis=1, inplace=True)

将 NaN 替换合适的值:fillna()

1 # 将所有 NaN 替换为 0
2 store_items.fillna(value=0)
3 # 前向填充:将 NaN 值替换为 DataFrame 中的上个值,axis决定列或行中的上个值
4 store_items.fillna(method='ffill', axis=1)
5 # 后向填充:将 NaN 值替换为 DataFrame 中的下个值,axis决定列或行中的下个值
6 store_items.fillna(method='backfill', axis=0)

 加载数据

csv 格式文件,每一行都是用逗号隔开:read_csv()

1 # 读取 csv 文件,第一行作为列标签
2 data = pd.read_csv('data.csv')
3 print(data)
4 print(data.shape)
5 print(type(data))

读取前 N 行数据:head(N)

1 # 读取头 3 行数据
2 print(data.head(3))

读取最后 N 行数据:tail(N)

1 # 读取后 5 行数据
2 print(data.tail(5))

检查是否有任何列包含 NaN 值:isnull().any()  类型 bool

1 # 检查任何列是否有 NaN 值,返回值:bool
2 print(data.isnull().any())

数据集的统计信息:describe()

1 # 获取 DataFrame 每列的统计信息:count,mean,std,min,25%,50%,75%,max
2 # 25%:四分之一位数;50%:中位数;75%:四分之三位数
3 print(data.describe())
4 # 通过统计学函数查看某个统计信息
5 print(data.max())
6 print(data.median())

数据相关性:不同列的数据是否有关联,1 表明关联性很高,0 表明数据不相关。corr()

1 # 数据相关性
2 print(data.corr())

数据分组:groupby(['lable1', 'lable2'])

1 # 按年份分组,统计总薪资
2 data.groupby(['Year'])['Salary'].sum()
3 # 按年份分组,统计平均薪资
4 data.groupby(['Year'])['Salary'].mean()
5 # 按年份,部门分组,统计总薪资
6 data.groupby(['Year', 'Department'])['Salary'].sum()

 

转载于:https://www.cnblogs.com/reaptomorrow-flydream/p/9178362.html


http://www.niftyadmin.cn/n/4557708.html

相关文章

vs masm汇编运行出现 LINK1104 无法打开Debug/xx**.obj,exe

那么有一种可能就是在你右击asm文件之后看到的项类型,不是如下图所示的 [Microsoft Macro Assembler], 而是[不参与生成]状态,可以点击弹出框,下拉最后,选择[重置为默认值](如果不知道是那种..),其他文件不清楚,但是每种文件都有对应的编译器来读取,cpp 就是c/c编译器去弄了! 顺…

团队作业4Alpha冲刺(真.三英战吕布团队)

第一天 2018/6/13 1.1 今日完成任务情况以及遇到的问题。 1.1.1:完成前台部分界面优化,后台进行代码优化 1.1.2团队前台部分js、jquery部分功能实现有难度。 1.2 明天任务安排、 刘兴昌: 刘云、肖尧:结合同类型APP,继续前端界面优…

怎么给C#按钮设置快捷键

说清楚一点 ||| 在属性里面设置 ||| 你是说设置那里的快捷键哪 从下面开始找 找一下吧 http://www.knowsky.com/336547.html这篇讲的详细一点 ||| Form窗体属性的AcceptButton设置你要提交的按钮的名字

2.1 操作元素基本方法

2.1 操作元素基本方法 前言从这篇开始,正式学习selenium的webdriver框架。我们平常说的 selenium自动化,其实它并不是类似于QTP之类的有GUI界面的可视化工具,我们要学的是webdriver框架的API。本篇主要讲如何用Python调用webdriver框架的API&…

在Turbo c可以复制吗

||| 可以啊 然后把光标移到你想要粘帖的地方 复制的话 然后按ctrlkk 在把光标移到你要结束的位置 然后按ctrlkb 上面有具体的操作方法:先把光标移到一要开始的位置 然后选择Block commands 按F1再F1 在tc中 当然可以了 ||| 可以 你说的应该是Turbo c2.0把 按ctrlkc …

Maven 在Install时出现MojoExecutionException。

[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building 某个Maven模块名 模块版本 [INFO] ----------------…

C++ 谁能帮我仔细介绍下C C#这3个语言

c#是微软的.NET语言中的一种 在c语言的基础上有了面向对象的编程模式 c是最早的面向对象编程语言 是所有其他高级语言的语法基础 兼有两者的特点 ||| C/C/C#准确的说 c语言是一种介于高级语言和低级语言之间的语言 但是由于C/C的语法90%相似 .NET体系包括C#.NET、VB.NET、VC.NE…

多线程及多进程部分概念汇总

1.线程的基本概念、线程的基本状态及状态之间的关系? 1.1线程概念 >>是进程中的一个执行控制单元,执行顺序流。同类的多个线程共享一块内存空间和一组系统资源,线程本身有一个供程序执行时的堆栈。线程在切换时负荷小,因此&…