什么是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. 实现一个CRDT工具库——PSet

    PSet 这段代码实现了一个PSet,即Positive Set,是GSet的扩展.PSet是一个集合,支持添加和删除元素,但是不支持重复元素.PSet的实现是通过两个GSet来实现的,一个GSet存 ...

  2. VS2013连接SQLSERVER数据库时显示无法添加数据连接

    VS2013连接sqlserver2008时出现如下错误: VS2013添加Microsoft SQL Server数据源时,会遇到无法添加数据连接. Could not load file or a ...

  3. 基于el-cascader级联选择器实现只有最后一级可以多选(已发布到npm & github)

    github地址:地址 背景: 我们经常级联合选择器多选的需求,但是element UI提供的级联选择器并不能只多选最后一级,所以我考虑基于element UI的级联选择器优化一下,实现可以多选最后一 ...

  4. Windows Powershell无法切换anaconda的问题

    前言 近期做大创发现power shell启动以后activate环境之后没有反应,遂进行如下操作 启用默认配置 使用管理员模式打开Powershell 输入conda init powershell ...

  5. WPF 界面布局、常用控件入门教程实例 WPF入门学习控件快速教程例子 WPF上位机、工控串口通信经典入门

    WPF(Windows Presentation Foundation)是一种用于创建 Windows 桌面应用程序的框架,它提供了丰富的控件库和灵活的界面布局,可以创建现代化的用户界面.下面是 WP ...

  6. kubernetes 设置 Master 可调度与不可调度

    kubernetes 设置 Master 可调度与不可调度 语法 kubectl taint node [node] key=value[effect] [effect] 可取值: [ NoSched ...

  7. IBM Cloud Computing Practitioners 2019 (IBM云计算从业者2019)Exam答案

    Cloud Computing Practitioners 2019 IBM Cloud Computing Practitioners 2019 (IBM云计算从业者2019)Exam答案,加粗的为 ...

  8. 一文彻底搞懂Raft算法,看这篇就够了!!!

    最近需要设计一个分布式系统,需要一个中间件来存储共享的信息,来保证多个系统之间的数据一致性,调研了两个主流框架Zookeeper和ETCD,发现都能满足我们的系统需求.其中ETCD是K8s中采用的分布 ...

  9. 通过 iframe 调用 天气预报&jsonp

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. c语言趣味编程(2)借书方案知多少

    一.问题描述 小明有5本新书,要借给A,B,C这三位小朋友,若每次每人只能借一本,则可以有多少种不同的借法? 二.设计思路 (1)定义三个变量a,b,c来代表三位小朋友借的书的编号 (2)利用for循 ...