什么是Series

Series是一种带有标签的一维数组,可以容纳各种类型的数据(例如整数,浮点数和字符串)。每个Series对象都有一个索引,它可以用来引用每个元素。Series对象的主要特征是可以进行矢量化操作(即一次对整个序列进行操作),因此非常适合处理数值数据。

什么是DataFrame?

DataFrame是一个带有标签的二维数据结构,可以容纳各种类型的数据(例如整数,浮点数和字符串)。每个DataFrame对象都由行和列组成,行表示一个实例,列表示属性。您可以将DataFrame视为电子表格或SQL表。DataFrame的主要特征是可以进行矢量化操作,因此非常适合处理具有多种属性的数据。此外,DataFrame还具有一些其他功能,例如灵活的数据对齐,分组和聚合,数据排序和合并等。

Pandas库中的Index对象是什么?

Pandas库中的Index对象是一种存储轴标签的不可变数据结构。它可以看做是Series和DataFrame的标识符,它们用来标识单个条目或多个相同类型的数据。Index可以是整数、字符串或自定义类型的对象,它们的主要功能包括:查找、切片、分组、聚合等。

Index对象的特点有以下几个方面: 1.不可变性:一旦创建,Index对象的元素不能被修改。 2.唯一性:Index对象中的元素必须是唯一的,否则会引发异常。 3.有序性:Index对象的元素可以按照定义的顺序排列,搜索和切片更高效。

Index对象可以通过多种方式创建,例如从一个列表、数组、元组、字典、DataFrame等对象中创建,也可以手动创建。在DataFrame中,行和列都有自己的Index对象,而在Series中,只有一维的数据和一个Index对象。利用Index对象,可以很方便地对数据进行索引、排序和子集切片等操作,提高了数据处理的效率。

如何创建Series?

1.通过列表或数组创建:可以通过pd.Series()方法将列表或数组转换成Series对象,例如:

import pandas as pd
data = [1, 2, 3, 4, 5]
s = pd.Series(data)
print(s) # 输出结果为:
# 0 1
# 1 2
# 2 3
# 3 4
# 4 5
# dtype: int64

2.通过字典创建:可以通过pd.Series()方法将字典转换成Series对象,例如:

import pandas as pd
data = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
s = pd.Series(data)
print(s) # 输出结果为:
# a 1
# b 2
# c 3
# d 4
# e 5
# dtype: int64

如何创建DataFrame

1.通过列表或数组创建:可以通过pd.DataFrame()方法将列表或数组转换成DataFrame对象,例如:

import pandas as pd
data = {'name': ['Tom', 'John', 'Mary', 'Lisa', 'Bob'], 'age': [28, 25, 23, 24, 27], 'score': [89, 78, 88, 95, 85]}
df = pd.DataFrame(data)
print(df) # 输出结果为:
# name age score
# 0 Tom 28 89
# 1 John 25 78
# 2 Mary 23 88
# 3 Lisa 24 95
# 4 Bob 27 85

2.通过字典创建:可以通过pd.DataFrame()方法将字典转换成DataFrame对象,例如:

import pandas as pd
data = {'name': ['Tom', 'John', 'Mary', 'Lisa', 'Bob'], 'age': [28, 25, 23, 24, 27], 'score': [89, 78, 88, 95, 85]}
df = pd.DataFrame(data, index=['one', 'two', 'three', 'four', 'five'])
print(df) # 输出结果为:
# name age score
# one Tom 28 89
# two John 25 78
# three Mary 23 88
# four Lisa 24 95
# five Bob 27 85

3.通过从文件中读取数据创建:可以通过pd.read_方法()将本地存储的文件导入DataFrame对象,例如:

import pandas as pd
df = pd.read_csv('data.csv')
print(df) # 输出结果为:
# name age score
# 0 Tom 28 89
# 1 John 25 78
# 2 Mary 23 88
# 3 Lisa 24 95
# 4 Bob 27 85

如何对DataFrame进行分组?

Pandas库中的DataFrame可以按照一个或多个列的值对数据集进行分组。分组后的数据集可以进行多种操作,如计算平均值、总和等。

下面是对DataFrame进行分组的基本步骤:

  1. 导入Pandas库
  2. 创建DataFrame, 例如,创建一个简单的DataFrame,包含姓名、性别和年龄:
  3. 对DataFrame进行分组,可以按照一个或多个列的值对DataFrame进行分组
  4. 对分组后的数据集进行操作,可以对分组后的数据集进行各种计算,如计算平均值和总和。
import pandas as pd

# 创建DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Ella', 'Frank'],
'Gender': ['F', 'M', 'M', 'M', 'F', 'M'],
'Age': [25, 34, 42, 19, 31, 28]}
df = pd.DataFrame(data) # 对DataFrame进行分组
grouped = df.groupby(['Gender', 'Age']) # 计算每个性别和年龄段的总和
print(grouped.sum())

如何对DataFrame进行聚合操作?

对于DataFrame进行聚合,可以使用groupby()方法将数据按照指定的列进行分组,然后再对分组后的数据进行统计、计算等操作。

具体步骤如下:

  1. 使用groupby()方法对数据进行分组,可以按照单列或多列进行分组

  2. 对分组后的数据进行统计、计算等操作,可以使用常见的聚合函数,比如sum()、mean()、max()、min()、count()等

  3. 对聚合后的数据进行重命名、排序等处理,最后得到需要的聚合结果

import pandas as pd

# 创建示例数据
data = {'category': ['A', 'A', 'B', 'B', 'B', 'C', 'C'],
'value': [1, 2, 3, 4, 5, 6, 7]}
df = pd.DataFrame(data) # 按照category列进行分组,计算value列的和、平均值和数量
result = df.groupby('category').agg({'value': ['sum', 'mean', 'count']}) # 对聚合结果进行重命名和排序
result.columns = ['total_value', 'mean_value', 'count']
result.sort_values('total_value', ascending=False, inplace=True) print(result)

如何对DataFrame进行合并操作?

对DataFrame进行合并操作,可以使用merge()方法,将两个DataFrame按照指定的列进行连接,类似于SQL中的Join操作。如果两个DataFrame的列名相同,则可以使用on参数指定连接的列,如果列名不同,则需要使用left_on和right_on参数指定连接的列。

具体步骤如下:

  1. 使用merge()方法将两个DataFrame按照指定列进行连接

  2. 可以选择不同的连接方式,包括inner、outer、left、right等

  3. 对连接后的数据进行排序、去重、重命名等处理,最终得到需要的结果

import pandas as pd

# 创建示例数据1
data1 = {'id': [1, 2, 3, 4, 5],
'name': ['Tom', 'Jerry', 'Lucy', 'Lily', 'Jim'],
'age': [20, 22, 25, 23, 26]}
df1 = pd.DataFrame(data1) # 创建示例数据2
data2 = {'id': [1, 2, 3, 6, 7],
'salary': [2000, 2200, 2500, 2300, 2600],
'gender': ['M', 'F', 'F', 'F', 'M']}
df2 = pd.DataFrame(data2) # 按照id列进行左连接
result = pd.merge(df1, df2, on='id', how='left') # 对连接后的数据进行去重、排序、重命名
result.drop_duplicates('id', inplace=True)
result.sort_values('id', inplace=True)
result.rename(columns={'name': 'user_name', 'salary': 'user_salary'}, inplace=True) print(result)

如何对DataFrame进行重塑操作?

对DataFrame进行重塑操作,包括转置、堆叠和反堆叠等。转置是将DataFrame的行与列互换,堆叠是将多个列进行合并为一列,反堆叠则是将一列拆分为多个列。

具体步骤如下:

  1. 对DataFrame进行转置,可以使用T属性或transpose()方法实现。

  2. 对DataFrame进行堆叠操作,可以使用stack()方法实现,堆叠时需要指定堆叠的列或行。

  3. 对DataFrame进行反堆叠操作,可以使用unstack()方法实现,反堆叠时需要指定反堆叠的列或行。

import pandas as pd

# 创建示例数据
data = {'name': ['Tom', 'Jerry', 'Lucy'],
'math': [90, 80, 70],
'english': [85, 78, 95],
'science': [88, 92, 85]}
df = pd.DataFrame(data) # 转置DataFrame
result1 = df.T # 堆叠DataFrame
result2 = df.set_index('name').stack().reset_index() # 反堆叠DataFrame
result3 = df.set_index('name').unstack().reset_index() print(result1)
print(result2)
print(result3)

如何对DataFrame进行透视表操作?

对DataFrame进行透视表操作,可以使用pivot_table()方法进行,透视表可以根据行、列和值进行数据汇总和计算,并展示出汇总计算后的结果。

具体步骤如下:

  1. 使用pivot_table()方法对DataFrame进行透视操作,需要指定行、列和值参数,并选择需要的聚合函数进行计算。

  2. 可以对透视表进行去重、排序和重命名等处理后,得到需要的结果。

import pandas as pd

# 创建示例数据
data = {'name': ['Tom', 'Jerry', 'Lucy', 'Lily', 'Jim', 'Bob', 'Alice'],
'gender': ['M', 'F', 'F', 'F', 'M', 'M', 'F'],
'age': [20, 22, 25, 23, 26, 21, 30],
'category': ['A', 'A', 'B', 'B', 'B', 'C', 'C'],
'salary': [2000, 2200, 2500, 2300, 2600, 2800, 2900]}
df = pd.DataFrame(data) # 对数据进行透视表操作,分别统计每种category、gender和age_range下salary的平均值和数量
result = pd.pivot_table(df, index=['category', 'gender'], columns=pd.cut(df['age'], [20, 25, 30]), values=['salary'],
aggfunc={'salary': ['mean', 'count']}, fill_value=0) # 对透视表进行去重、排序、重命名等处理
result = result.stack(level=[0, 1])
result.columns = ['_'.join(col).strip() for col in result.columns.values]
result.reset_index(inplace=True)
result.sort_values(['category', 'gender', 'age'], inplace=True) print(result)

如何处理重复值?

Pandas库中提供了一些方法来处理重复值,包括检测和删除重复值。

检测重复值:

Pandas库中提供了duplicated()方法用来检测重复值,返回一个布尔类型的Series,表示每一行是否为重复行。

drop_duplicates()方法则是用来删除重复行,返回一个新的DataFrame,移除重复行之后的版本。

import pandas as pd

# 创建一个包含重复行的DataFrame

df = pd.DataFrame({'col1': [1, 2, 3, 4, 4, 5],
'col2': ['A', 'B', 'C', 'D', 'D', 'E']})
print(df) # 检测重复行 print(df.duplicated()) # 删除重复行 df_clean = df.drop_duplicates()
print(df_clean)

如何处理异常值?

import pandas as pd
import numpy as np # 创建一个包含异常值的Series s = pd.Series([1, 2, 3, 4, 5, 100])
print(s) # 使用Z-score方法检测异常值 zscore_threshold = 3 # 设置阈值为3
mean = s.mean()
std = s.std()
zscore = (s - mean) / std
print(zscore.abs() > zscore_threshold) # 使用IQR方法检测异常值 q1 = s.quantile(0.25)
q3 = s.quantile(0.75)
iqr = q3 - q1
iqr_threshold = 1.5 # 设置阈值为1.5
print((s < q1 - iqr_threshold * iqr) | (s > q3 + iqr_threshold * iqr)) # 使用fillna()方法替换异常值 s_clean = s.copy()
s_clean[s_clean > 10] = np.nan # 设置异常值,将大于10的值设置为缺失值
s_clean = s_clean.fillna(s_clean.median()) # 使用中位数来填充缺失值
print(s_clean) # 使用replace()方法替换异常值 s_clean = s.replace(100, s.median()) # 将100替换为中位数
print(s_clean)

如何处理离群值?

Pandas库中提供了一些方法来处理离群值(Outlier),包括检测和替换离群值。

检测离群值: Pandas库中提供了一些方法来检测离群值,比如基于数据的分布和规模,使用Z-score或IQR两种方法进行离群值的检测,并返回一个布尔类型的Series,表示每一行是否为离群值。

  • Z-score方法将每个值转换成其到平均值的标准偏差的距离,超过给定阈值的值被视为离群值。
  • IQR方法则是基于四分位数,将数据划分成四个部分,其中50%的数据落在中间,将中间部分的极端数据看做离群值。

替换离群值: 处理离群值时,我们可以使用fillna()方法或replace()方法来替换离群值。

  • fillna()方法可以使用mean、median、mode等方法替换缺失值,也可以使用给定的常数或者使用前一个或后一个非缺失值填充。
  • replace()方法可以使用常数或者使用给定的字典或函数替换特定的值。
import pandas as pd
import numpy as np # 创建一个包含离群值的Series s = pd.Series([1, 2, 3, 4, 5, 100])
print(s) # 使用Z-score方法检测离群值 zscore_threshold = 3 # 设置阈值为3
mean = s.mean()
std = s.std()
zscore = (s - mean) / std
print(zscore.abs() > zscore_threshold) # 使用IQR方法检测离群值 q1 = s.quantile(0.25)
q3 = s.quantile(0.75)
iqr = q3 - q1
iqr_threshold = 1.5 # 设置阈值为1.5
print((s < q1 - iqr_threshold * iqr) | (s > q3 + iqr_threshold * iqr)) # 使用fillna()方法替换离群值 s_clean = s.copy()
s_clean[s_clean > 10] = np.nan # 将大于10的值设置为缺失值
s_clean = s_clean.fillna(s_clean.median()) # 使用中位数来填充缺失值
print(s_clean) # 使用replace()方法替换离群值 s_clean = s.clip(0, 10) # 将大于10的值和小于0的值都设置为10和0
print(s_clean)

如何进行数据类型转换?

在Pandas库中,我们需要对文件读入的数据进行处理和转换后,才能在之后的分析中有效地使用。数据类型转换是数据预处理中最基本的操作之一,数据类型的转换能够将原有数据的类型转变为用户需要的类型,包括将字符串转换为数字、将数字转换为日期、将数值转换为类别类型等,Pandas库中提供了astype()方法来进行数据类型转换。

astype()方法: Pandas库中的astype()方法可以将一个或多个列的数据类型转换为另一种类型。使用astype()方法,需要在括号中指定要转换数据类型的列名和数据类型。转换数据类型后将返回一个新的DataFrame,原数据不发生改变。

import pandas as pd

# 创建一个包含数字和字符串的DataFrame

df = pd.DataFrame({'col1': [1, 2, 3],
'col2': ['4', '5', '6']})
print(df.dtypes) # 转换数据类型 df['col2'] = df['col2'].astype(int)
print(df.dtypes)

【技术积累】Python中的Pandas库【三】的更多相关文章

  1. Python之使用Pandas库实现MySQL数据库的读写

      本次分享将介绍如何在Python中使用Pandas库实现MySQL数据库的读写.首先我们需要了解点ORM方面的知识. ORM技术   对象关系映射技术,即ORM(Object-Relational ...

  2. 沉淀,再出发:python中的pandas包

    沉淀,再出发:python中的pandas包 一.前言 python中有很多的包,正是因为这些包工具才使得python能够如此强大,无论是在数据处理还是在web开发,python都发挥着重要的作用,下 ...

  3. 【归纳】正则表达式及Python中的正则库

    正则表达式 正则表达式30分钟入门教程 runoob正则式教程 正则表达式练习题集(附答案) 元字符\b代表单词的分界处,在英文中指空格,标点符号或换行 例子:\bhi\b可以用来匹配hi这个单词,且 ...

  4. 利用Python中的mock库对Python代码进行模拟测试

    这篇文章主要介绍了利用Python中的mock库对Python代码进行模拟测试,mock库自从Python3.3依赖成为了Python的内置库,本文也等于介绍了该库的用法,需要的朋友可以参考下     ...

  5. python中的pandas的两种基本使用

    python中的pandas的两种基本使用2018年05月19日 16:03:36 木子柒努力成长 阅读数:480 一.pandas简介 pandas:panel data analysis(面板数据 ...

  6. DataSnap高级技术(7)—TDSServerClass中Lifecycle生命周期三种属性说明

    From http://blog.csdn.net/sunstone/article/details/5282666 DataSnap高级技术(7)—TDSServerClass中Lifecycle生 ...

  7. Python中使用第三方库xlrd来写入Excel文件示例

    Python中使用第三方库xlrd来写入Excel文件示例 这一篇文章就来介绍下,如何来写Excel,写Excel我们需要使用第三方库xlwt,和xlrd一样,xlrd表示read xls,xlwt表 ...

  8. python做数据分析pandas库介绍之DataFrame基本操作

    怎样删除list中空字符? 最简单的方法:new_list = [ x for x in li if x != '' ] 这一部分主要学习pandas中基于前面两种数据结构的基本操作. 设有DataF ...

  9. 用python做数据分析pandas库介绍之DataFrame基本操作

    怎样删除list中空字符? 最简单的方法:new_list = [ x for x in li if x != '' ] 这一部分主要学习pandas中基于前面两种数据结构的基本操作. 设有DataF ...

  10. Python中的Pandas模块

    目录 Pandas Series 序列的创建 序列的读取 DataFrame DataFrame的创建 DataFrame数据的读取 Panel Panel的创建 Pandas Pandas ( Py ...

随机推荐

  1. MySQL与Java常用数据类型的对应关系

    一.字符串数据类型: MySQL类型名 大小 用途 对应Java类名 char 0-255 bytes 定长字符串 (姓名.性别.学号) String varchar 0-65535 bytes 变长 ...

  2. VUE2.x原理之Object.defineProperty()

    Object.defineProperty()语法说明 Object.defineProperty()的作用就是直接在一个对象上定义一个新属性,或者修改一个已经存在的属性 Object.defineP ...

  3. 有执行语句:console.log(fn2(2)[3]),补充函数,使执行结果为"hello"

    function fn2(a){ return [1,2,3,"hello"];}console.log(fn2(2)[3])//hello 这个2是混淆视线的,即使没有这个2.函 ...

  4. selenium验证码处理之机器学习(光学识别ocr技术获取验证码的数据)

    ocr识别库地址: https://github.com/UB-Mannheim/tesseract/wiki 遇到的问题:百度的解释------------------- 遇到的问题2:

  5. Flask框架使用蓝图划分目录、g对象、使用数据库连接池链接数据库

    目录 一.使用蓝图划分项目目录 1.蓝图的介绍 2.蓝图的使用 二.介绍flask框架的g对象 1. g对象是什么? 2. 使用代码再次解释g对象 三.使用数据库连接池链接数据库 1. 引入数据库连接 ...

  6. 纯前端使用xlsx实现导出表格

    列表数据纯前端使用xlsx实现导出功能 基础写法 let filename = "资产导出.xlsx"; 定义导出数据 let data = [ ["第一列", ...

  7. [OpenCV-Python] 24 模板匹配

    文章目录 OpenCV-Python:IV OpenCV中的图像处理 24 模板匹配 24.1 OpenCV 中的模板匹配 24.2 多对象的模板匹配 OpenCV-Python:IV OpenCV中 ...

  8. MQTT.fx的安装和使用

    一.下载和安装 MQTT.fx支持Windows/Linux/Mac,附下载地址:http://www.jensd.de/apps/mqttfx/,下载完成之后双击进行安装. 二.配置使用 打开软件, ...

  9. P5356 [Ynoi2017] 由乃打扑克

    md调了5h才调出来恶心坏了没想到这么快就做了第二道Ynoi 据说这题其实不卡常 屠龙宝刀点击就送 题面也很清楚,给定两种操作,一种是区间加,一种是询问区间内第 k 小的数的值是多少. 对于区间加,在 ...

  10. Vulhub activewq_漏洞复现——源码分析

    Vulhub activewq_漏洞复现--源码分析 漏洞简介 Apache ActiveMQ是由美国阿帕奇(Apache)软件基金会开发的开源消息中间件,支持Java消息服务.集群.Spring框架 ...