python 【模块】pandas数组处理详解(1)

简介: python 【模块】pandas数组处理详解(1)

python 模块 pandas 数组处理

文章目录

python 模块 pandas 数组处理

1. pandas介绍

2. 方法

2.1 Series

2.1.1 传递list对象创建一个 Series

2.1.2 传递numpy array时间索引以及列标签来创建DataFrame

2.1.3 传递被转换成类似序列结构的字典对象来创建DataFrame

2.2 查看数据

2.2.1 查看frame中头部和尾部的行

2.2.2 显示索引、列和底层的numpy数据。

2.2.3 describe()函数对数据快速的统计汇总:

2.2.4 对数据的转置,按轴进行排序,按值进行排序

2.3 选择

2.3.1 选择一个单独的列,这将会返回一个Series,等同于df.A

2.3.2 通过多个标签在多个轴上进行选择 用loc 两个中括号

2.3.3 标签切片,类似于2

2.3.4 对于返回的对象进行维度缩减

2.3.5 获取一个标量以及快速访问一个标量。(意思等价)

2.4 通过位置选择

2.4.1 通过传递数值进行 位置选择(选择的是行)

2.4.1 通过数值进行切片

2.4.2 通过指定一个位置的列表

2.4.3 对行和列进行切片

2.4.4 获取特定的值

2.5 布尔索引

2.5.1 使用一个单独列的值来选择数据

2.5.2 使用where操作来选择数据

2.5.3 使用isin()方法来过滤

2.6 设置

2.6.1 设置新的列

2.6.2 通过标签设置新的值

2.6.3 通过位置设置新的值:

2.6.4 通过一个numpy数组设置一组新值

2.6.5 通过where操作来设置新的值

2.7 缺失值的处理

2.7.1 reindex()方法对指定轴上的索引进行改变/增加、删除

2.7.2 去掉包含缺失值的行

2.7.3 对缺失值进行补充

2.7.4 对数据进行布尔填充

2.8 相关操作

2.8.1 执行描述性统计

2.8.2 对数据应用函数

2.9 字符串方法

2.10 合并

2.10.1 concat

2.10.2 append将一行连接到DataFrame

2.11 分组

1. pandas介绍

Pandas 的数据结构:Pandas 主要有 Series(一维数组),DataFrame(二维数组),Panel(三维数组),Panel4D(四维数组),PanelND(更多维数组)等数据结构。其中 Series 和 DataFrame 应用的最为广泛。

Pandas 常用的数据结构有两种:Series 和 DataFrame。这些数据结构构建在 Numpy 数组之上,这意味着它们效率很高。

python版本:3.5>=python

导入相关库

import numpy as np
import pandas as pd

2. 方法

2.1 Series

Series 是一个带有 名称 和索引的一维数组,既然是数组,肯定要说到的就是数组中的元素类型,在 Series 中包含的数据类型可以是整数、浮点、字符串、Python对象等。

2.1.1 传递list对象创建一个 Series

pandas会默认创建整型索引

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
s= pd.Series([1,3,5,np.nan,6,8])
print(s)

//输出

0    1.0
1    3.0
2    5.0
3    NaN
4    6.0
5    8.0
dtype: float64

2.1.2 传递numpy array时间索引以及列标签来创建DataFrame

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
s= pd.Series([1,3,5,np.nan,6,8])
# print(s)
dates = pd.date_range('20170801',periods=6)
df = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))
print(df)

//

                   A         B         C         D
2017-08-01 -0.352464  0.207259 -0.379499 -0.040017
2017-08-02 -1.400304 -1.609741  1.149181  0.353892
2017-08-03 -0.244790  0.343552 -2.269876 -0.832983
2017-08-04  0.817258 -0.256027  0.917888 -0.240781
2017-08-05  0.312557 -1.103468  1.140370 -0.097515
2017-08-06 -0.945031  0.178114  0.099680 -0.993974

2.1.3 传递被转换成类似序列结构的字典对象来创建DataFrame

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df2 = pd.DataFrame({
    'A': 1,
    'B':pd.Timestamp('20170801'),
    'C':pd.Series(1,index=list(range(4)),dtype='float64'),
    'D':np.array([3]*4,dtype='int64'),
    'E':pd.Categorical(["test","train","test","train"]),
    'F':'fooo'
})
print(df2)
 A          B    C  D      E     F
0  1 2017-08-01  1.0  3   test  fooo
1  1 2017-08-01  1.0  3  train  fooo
2  1 2017-08-01  1.0  3   test  fooo
3  1 2017-08-01  1.0  3  train  fooo

查看不同列的数据类型

print(df2.dtype)

//

A             int64
B    datetime64[ns]
C           float64
D             int64
E          category
F            object
dtype: object

2.2 查看数据

2.2.1 查看frame中头部和尾部的行

df.head(3)
df.tail(3)

2.2.2 显示索引、列和底层的numpy数据。

print(df.index)
print(df.columns)
print(df.values)

//

DatetimeIndex(['2017-08-01', '2017-08-02', '2017-08-03', '2017-08-04',
               '2017-08-05', '2017-08-06'],
              dtype='datetime64[ns]', freq='D')
Index(['A', 'B', 'C', 'D'], dtype='object')
[[-0.99340137 -0.12548833 -1.08581538  1.17112124]
 [ 0.29427792  0.20182606 -0.84427908 -1.42783808]
 [-0.06528316  1.55255719  1.15818104  0.05286832]
 [ 1.49223138 -1.11517738  2.01386582  0.3496034 ]
 [ 0.23697223  0.43241392 -0.97061103  0.79105226]
 [ 2.96518919  0.8754193  -1.26479748  0.29930427]]

2.2.3 describe()函数对数据快速的统计汇总:

print(describe())

//

              A         B         C         D
count  6.000000  6.000000  6.000000  6.000000
mean   0.396478  0.089271 -0.006982  0.281260
std    1.342037  1.158896  0.513877  0.997442
min   -1.395445 -1.287098 -1.047989 -1.062651
25%   -0.390341 -0.907016  0.116073 -0.073818
50%    0.210131  0.248303  0.193435  0.058509
75%    1.401632  0.856122  0.235431  0.655625
max    2.145753  1.559510  0.279513  1.896458

2.2.4 对数据的转置,按轴进行排序,按值进行排序

df.T    
df.sort_index(axis=1,ascending=False)
df.sort(columns='B')

2.3 选择

虽然标准的python/numpy的选择和设置表达式都能够直接派上用场,但是作为工程使用的代码,我们推荐使用经过优化的pandas数据访问 方式:.at .iat .iloc .loc .ix

获取:

2.3.1 选择一个单独的列,这将会返回一个Series,等同于df.A

print(df['A'])

//

2017-08-01    0.559156
2017-08-02   -1.381263
2017-08-03    0.127286
2017-08-04    0.771317
2017-08-05    0.763690
2017-08-06   -0.123249
Freq: D, Name: A, dtype: float64

2.3.2 通过多个标签在多个轴上进行选择 用loc 两个中括号

print(df.loc[:,['A','B']])

//

                   A         B
2017-08-01  0.040603  1.519448
2017-08-02 -2.429148  0.874873
2017-08-03 -0.315154  0.285603
2017-08-04  0.878968 -0.130717
2017-08-05  0.201083 -0.280419
2017-08-06  1.089989  0.754818

2.3.3 标签切片,类似于2

print(df.loc['20170802':'20170804',['A','B']])

//

                   A         B
2017-08-02  1.923047  0.324715
2017-08-03 -0.349817  0.085359
2017-08-04 -0.675602  1.166312

2.3.4 对于返回的对象进行维度缩减

print(df.loc['20170803',['A','B']])

//

A   -1.133357
B   -1.008605
Name: 2017-08-03 00:00:00, dtype: float64

2.3.5 获取一个标量以及快速访问一个标量。(意思等价)

df.loc(dates[0],'A')
df.at[dates[0],'A']

2.4 通过位置选择

2.4.1 通过传递数值进行 位置选择(选择的是行)

print(df)
print(df.iloc[3])# 取第四行的数据

//

2017-08-01  0.150731 -0.167577  1.524639 -0.324676
2017-08-02 -0.118888 -0.100348  0.666961  0.618953
2017-08-03  0.634666 -0.937274  0.280727 -2.504798
2017-08-04  0.395685 -0.650699 -0.573055 -2.597323
2017-08-05  1.403470  0.636823  0.289136  1.294045
2017-08-06 -1.337154  1.718215 -0.093115 -1.529378
A    0.395685
B   -0.650699
C   -0.573055
D   -2.597323
Name: 2017-08-04 00:00:00, dtype: float64

2.4.1 通过数值进行切片

与numpy /python 中的情况类似

print(df.iloc[3:5,0:2])

//

                   A         B
2017-08-04  1.064645  1.346498
2017-08-05 -0.253172  0.713125
2.4.2 通过指定一个位置的列表

与numpy/python 中的情况类似

print(df.iloc[[1,2,4],[0,2]])

//

                   A         C
2017-08-02 -0.987798 -0.081209
2017-08-03  0.039192 -0.244556
2017-08-05 -0.043044 -0.337542
2.4.3 对行和列进行切片
print(df.iloc[1:3,:])#对行进行切片
print(df.iloc[:,1:3]) #对列进行切片

//

                 A         B         C         D
2017-08-02  0.598266  0.410904 -0.587577  0.979511
2017-08-03 -0.206643 -0.859047 -0.110966 -0.696556
                   B         C
2017-08-01 -0.341683 -0.378477
2017-08-02  0.410904 -0.587577
2017-08-03 -0.859047 -0.110966
2017-08-04 -0.486971  0.248343
2017-08-05  2.641393 -1.229395
2017-08-06  1.023585  0.630160

2.4.4 获取特定的值

print(df.iloc[1,1])
print(df.iat[1,1])

//

0.426774827739
0.426774827739
相关文章
|
17天前
|
存储 开发者 Python
Python中的collections模块与UserDict:用户自定义字典详解
【4月更文挑战第2天】在Python中,`collections.UserDict`是用于创建自定义字典行为的基类,它提供了一个可扩展的接口。通过继承`UserDict`,可以轻松添加或修改字典功能,如在`__init__`和`__setitem__`等方法中插入自定义逻辑。使用`UserDict`有助于保持代码可读性和可维护性,而不是直接继承内置的`dict`。例如,可以创建一个`LoggingDict`类,在设置键值对时记录操作。这样,开发者可以根据具体需求定制字典行为,同时保持对字典内部管理的抽象。
|
19天前
|
存储 缓存 算法
Python中collections模块的deque双端队列:深入解析与应用
在Python的`collections`模块中,`deque`(双端队列)是一个线程安全、快速添加和删除元素的双端队列数据类型。它支持从队列的两端添加和弹出元素,提供了比列表更高的效率,特别是在处理大型数据集时。本文将详细解析`deque`的原理、使用方法以及它在各种场景中的应用。
|
1天前
|
测试技术 Python
Python 有趣的模块之pynupt——通过pynput控制鼠标和键盘
Python 有趣的模块之pynupt——通过pynput控制鼠标和键盘
|
1天前
|
Serverless 开发者 Python
《Python 简易速速上手小册》第3章:Python 的函数和模块(2024 最新版)
《Python 简易速速上手小册》第3章:Python 的函数和模块(2024 最新版)
25 1
|
1天前
|
数据采集 SQL 数据可视化
Python数据分析工具Pandas
【4月更文挑战第14天】Pandas是Python的数据分析库,提供Series和DataFrame数据结构,用于高效处理标记数据。它支持从多种数据源加载数据,包括CSV、Excel和SQL。功能包括数据清洗(处理缺失值、异常值)、数据操作(切片、过滤、分组)、时间序列分析及与Matplotlib等库集成进行数据可视化。其高性能底层基于NumPy,适合大型数据集处理。通过加载数据、清洗、分析和可视化,Pandas简化了数据分析流程。广泛的学习资源使其成为数据分析初学者的理想选择。
4 1
|
3天前
|
Python
python学习-函数模块,数据结构,字符串和列表(下)
python学习-函数模块,数据结构,字符串和列表
25 0
|
4天前
|
Python
python学习14-模块与包
python学习14-模块与包
|
6天前
|
SQL 关系型数据库 数据库
Python中SQLite数据库操作详解:利用sqlite3模块
【4月更文挑战第13天】在Python编程中,SQLite数据库是一个轻量级的关系型数据库管理系统,它包含在一个单一的文件内,不需要一个单独的服务器进程或操作系统级别的配置。由于其简单易用和高效性,SQLite经常作为应用程序的本地数据库解决方案。Python的内置sqlite3模块提供了与SQLite数据库交互的接口,使得在Python中操作SQLite数据库变得非常容易。
|
6天前
|
存储 安全 数据处理
python如何将数据写到数组里
【4月更文挑战第12天】
|
11天前
|
索引 Python
「Python系列」Python operator模块、math模块
Python的`operator`模块提供了一系列内置的操作符函数,这些函数对应于Python语言中的内建操作符。使用`operator`模块可以使代码更加清晰和易读,同时也能提高性能,因为它通常比使用Python内建操作符更快。
27 0

热门文章

最新文章