pandas&numpy 数据处理~~两万字超全(中)

简介: pandas&numpy 数据处理~~两万字超全(中)

5. 循环矩阵

for循环

## 1. 迭代每一行
for row in A:
    print(row)
    输出:
    [3 4 5 6]
    [ 7  8  9 10]
    [11 12 13 14]
## 2. 迭代每一列
# for col in A:       #失败
#     print(col)
print(A.T)  #----转置A
    输出:
    [[ 3  7 11]
     [ 4  8 12]
     [ 5  9 13]
     [ 6 10 14]]
for col in A.T:   # 通过转置迭代
    print(col)
    输出:
    [[ 3  7 11]
     [ 4  8 12]
     [ 5  9 13]
     [ 6 10 14]]
## 3. 迭代出每个元素,先用flat迭代器将A平铺,再进行迭代
print(A.flatten())    #用flatten()返回的是array
    输出:
    [ 3  4  5  6  7  8  9 10 11 12 13 14]
for item in A.flat:
    print(item)
    输出:
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14


6. array的合并

# 定义一个array
A = np.array([1,1,1])
B = np.array([2,2,2])
print('--------上下合并两个array——vatack()-----------')
C = np.vstack((A,B))     #vertical stack  上下合并
print(C)    
print(A.shape,C.shape)
    输出:
    [[1 1 1]
     [2 2 2]]
    (3,) (2, 3)
print('--------左右合并两个array——hstack()-----------')
D = np.hstack((A,B))     # horizontal stack左右合并
print(D)
print(A.shape,D.shape)
    输出:
    [1 1 1 2 2 2]
    (3,) (6,)
print('----------序列转置仍是序列--------------------')
print(A.T.shape)    #(3,)   序列的转置仍是序列
    输出:(3,)
print('----------------序列变为矩阵---------------')
print(A[:,np.newaxis])
print(A[:,np.newaxis].shape)    #  (3, 1) np.newaxis 给数组加一个维度
    输出:
    [[1]
     [1]
     [1]]
    (3, 1)
print(A[np.newaxis,:])
print(A[np.newaxis,:].shape)   #(1, 3)
    输出:
    [[1 1 1]]
    (1, 3)
print('-----------------转为矩阵之后合并----------------------')
A1 = np.array([1,1,1])[:,np.newaxis]
B1 = np.array([2,2,2])[:,np.newaxis]
C1 = np.vstack((A,B))      #纵向合并
D1 = np.hstack((A,B))      #横向合并
print(C1)
    输出:
    [[1 1 1]
     [2 2 2]]
print(D1)
    输出:
    [1 1 1 2 2 2]
print('------------多个array合并-------------------------')
A1 = np.array([1,1,1])[:,np.newaxis]
B1 = np.array([2,2,2])[:,np.newaxis]
C2 = np.concatenate((A1,B1,B1,A1),axis = 0)    #可以在axis处定义合并方式,axis=0,纵向合并;axis=1横向合并
D2 = np.concatenate((A1,B1,B1,A1),axis = 1)
print(C2)
    输出:
    [[1]
     [1]
     [1]
     [2]
     [2]
     [2]
     [2]
     [2]
     [2]
     [1]
     [1]
     [1]]
print(D2)
    输出:
    [[1 2 2 1]
     [1 2 2 1]
     [1 2 2 1]]


7. array 分割

  1. 对等分割: np.split()
  2. 不等量分割: np.array_split()
#创建array
A = np.arange(12).reshape((3,4))
print(A)
    输出:
    [[ 0  1  2  3]
     [ 4  5  6  7]
     [ 8  9 10 11]]
print('------------对等分割 np.split()-------------------')
print(np.split(A,3,axis = 0))   # split(对哪个array分割,分割成几块,axis=0/1);axis=0,对列操作,每列分为几块,合并到一块;axis=1,对行操作,玫红分为几块,再和一块
    输出:
    [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]
print(np.split(A,2,axis = 1))
    输出:
    [array([[0, 1],
           [4, 5],
           [8, 9]]), array([[ 2,  3],
           [ 6,  7],
           [10, 11]])]
print('---------------不等量分割 np.array_split()------------------')
print(np.array_split(A,3,axis = 1))
    输出:
    [array([[0, 1],
           [4, 5],
           [8, 9]]), array([[ 2],
           [ 6],
           [10]]), array([[ 3],
           [ 7],
           [11]])]
print(np.vsplit(A,3))     #上下分割
    输出:
    [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]
print(np.hsplit(A,2))     #左右分割
    输出:
    [array([[0, 1],
           [4, 5],
           [8, 9]]), array([[ 2,  3],
           [ 6,  7],
           [10, 11]])]


8. numpy copy & deep copy

# 定义一个array
a = np.arange(4)
print(a)
    输出:
    [0 1 2 3]
b = a
c = a
d = b
a[0]=11
a 
    输出:array([11, 22,  0,  3])
b is a  #判断a与b是否相等
    输出:True
d[1:3]=[22,33]
a
    输出:array([11, 22, 33,  3])
# 把a的值赋给b,但不关联,改变a的值,b不变
print(a)
b = a.copy()      # deep copy
a[2]=33
print(a)
print(b)
    输出:
    [ 0  1 11  3]---a
    [ 0  1 33  3]---a'
    [ 0  1 11  3]---b


pandas


1. pandas安装

  1. 使用 pip 安装 pandas:
    pip install pandas
    具体可见:
    pandas&numpy安装
  2. 安装成功后,我们就可以导入 pandas 包使用:
import pandas as pd
  1. 事例
import pandas as pd
# 查看pandas版本
pd.__version__    ## 输出:'1.4.3'
# 实例
import pandas as pd
mydataset = {
  'sites': ["Google", "Runoob", "Wiki"],
  'number': [1, 2, 3]
}
myvar = pd.DataFrame(mydataset)
print(myvar)
# 输出结果如下图:

194c8286b1e648338905f3d9094b302f.png


2. 数据结构 - Series

  1. Pandas Series 类似表格中的一个列(column),类似于一维数组,可以保存任何数据类型。
  2. Series 由索引(index)和列组成,函数如下:
  1. pandas.Series( data, index, dtype, name, copy)
  2. 参数说明:
  3. data:一组数据(ndarray 类型)。
  4. index:数据索引标签,如果不指定,默认从 0 开始。
  5. dtype:数据类型,默认会自己判断。
  6. name:设置名称。
  7. copy:拷贝数据,默认为 False。
  1. 实例
import pandas as pd
a = [1, 2, 3]
myvar1 = pd.Series(a)
print(myvar1)
# 输出结果如下图:

c3ab86880377474b976e7c6fcb26bb03.png


3. 数据结构 - DataFrame


  1. DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame 既有行索引也有列索引,它可以被看做由 Series 组成的字典(共同用一个索引)。
  2. DataFrame 构造方法如下:

pandas.DataFrame( data, index, columns, dtype, copy)

参数说明:

data:一组数据(ndarray、series, map, lists, dict 等类型)。

index:索引值,或者可以称为行标签。

columns:列标签,默认为 RangeIndex (0, 1, 2, …, n) 。

dtype:数据类型。

copy:拷贝数据,默认为 False。


4. 创建DataFrame


4.1 使用列表创建

import pandas as pd
data = [['Google',10],['Runoob',12],['Wiki',13]]
df = pd.DataFrame(data,columns=['Site','Age'],dtype=float)
print(df)
# 输出结果如下图:


06b290f5102442c695b0689c0ec8f5dc.png

4.2 使用ndarrays 建

  以下实例使用 ndarrays 创建,ndarray 的长度必须相同, 如果传递了 index,则索引的长度应等于数组的长度。如果没有传递索引,则默认情况下,索引将是range(n),其中n是数组长度。


import pandas as pd
data = {'Site':['Google', 'Runoob', 'Wiki'], 'Age':[10, 12, 13]}
df = pd.DataFrame(data)
print (df)
# 输出结果如下图:

5fc310264b734376926f350896bbd7cc.png

4.3 使用字典创建

import pandas as pd
data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data)
df
# 输出结果如下图:


13ee50c141e3456f863e650bbf33ff15.png

没有对应的部分数据为 NaN。


4.4 实例 - loc

  1. 实例1——返回指定行数据

使用 loc属性返回指定行的数据,如果没有设置索引,第一行索引为 0,第二行索引为 1,以此类推:

part1: 输出单行数据

import pandas as pd
data={
    'calories':[420,380,390],
    'duration':[50,40,45]
}
# 数据载入到DataFrame
df=pd.DataFrame(data)
# 返回第一行
print(df.loc[0])
# 返回第二行
print(df.loc[1])
# 输出结果如下图:


ac48d9a7e4f84b41a75985c2b7d4dbb6.png

注意:返回结果其实就是一个 Pandas Series 数据。

part2: 输出多行数据

# 返回第一行和第二行
print(df.loc[[0, 1]])
# 输出结果如下图:

ae48d71fe43b4e2cbdecfc9af26a4513.png

注意:返回结果其实就是一个 Pandas DataFrame 数据。


  1. 实例2——指定索引值
import pandas as pd 
data = {
    'calories':[20,30,40],
    'duration':[50,40,45]
}
# 指定索引值
df = pd.DataFrame(data,index=['day1','day2','day3'])
df
#输出结果如下图:

24af24987b8b4287a86c44f0dfd52556.png

  1. 实例3——返回指定索引-对应到某一行
    Pandas 可以使用 loc属性返回指定索引-对应到某一行:
import pandas as pd 
data = {
    'calories':[20,30,40],
    'duration':[50,40,45]
}
# 指定索引值
df = pd.DataFrame(data,index=["day1","day2","day3"])
# 指定索引
print(df.loc["day2"])
# 输出结果如下图:


3d121c54b0914c0f9ac3b66b0f756c36.png


5. pandas - csv文件


  1. CSV(Comma-Separated Values,逗号分隔值,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。

CSV 是一种通用的、相对简单的文件格式,被用户、商业和科学广泛应用。

  1. 以“match.csv"为例,我所使用的编辑器为“jupyter notebook”,安装教程见链接:jupyter notebook安装教程
    如需csv文件,可以私信我。


导入文件

jupyter notebook 点击右上角“upload”,选择要导入的文件,上传即可。

b4df20a7abf24c3682bbe38382a97158.png

读取数据:

import pandas as pd 
df = pd.read_csv('match.csv')     # 注意文件要用引号引起来
df
# 输出结果如下:

36431e9d1e1a460986c09a866398fd92.png

to_string()返回DataFrame类型数据:

import pandas as pd
df = pd.read_csv('match.csv')
print(df.to_string())   #to_string() 用于返回 DataFrame 类型的数据,如果不使用该函数,则输出结果为数据的前面 5 行和末尾 5 行,中间部分以 ... 代替。
# 输出结果如下图:


b3c81541e9614dcebbb75f2f356e4ede.png

实例: 使用to_csv将 DataFrame 存储为 csv 文件:输入如下代码,运行后便可以在jupyter notebook首页看到保存后的CSV文件

import pandas as pd
#三个字段 name,site,age
nme = ["Goole","Runboo","Tabao","Wiki"]
st = ["www.google.com", "www.runoob.com", "www.taobao.com", "www.wikipedia.org"]
ag = [90,40,80,98]
#字典
dict = {'name':nme,'site':st,'age':ag}
df = pd.DataFrame(dict)
#保存 dataframe
df.to_csv('site.csv')


36b0cb12525d4aa991778b5999916c3f.png

b77b7297ca334b0fb5ebe32851450205.png


6. pandas - 数据处理


6.1 head()

head( n ) 方法用于读取前面的 n 行,如果不填参数 n ,默认返回 5 行。

# 读取前五行
import pandas as pd
df = pd.read_csv("match.csv")
df.head(5)


f07092cf6886483f9216cb97827213db.png

6.2 tail()

tail( n ) 方法用于读取尾部的 n 行,如果不填参数 n ,默认返回 5 行,空行各个字段的值返回 NaN。

import pandas as pd
df = pd.read_csv("match.csv")
#读取末尾10行
df.tail(10)


a0013a9a83f640ecbec7aaa79c7100e6.png


6.3 info()

info() 方法返回表格的一些基本信息:

import pandas as pd
df = pd.read_csv('match.csv')
df.info()
# 输出结果如下:


75bb28920ea44f9c81e6e7748324a909.png

non-null 为非空数据,我们可以看到上面的信息中,总共 458 行,College 字段的空值最多。

相关文章
|
20天前
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
51 0
|
13天前
|
数据处理 Python
在数据科学领域,Pandas和NumPy是每位数据科学家和分析师的必备工具
在数据科学领域,Pandas和NumPy是每位数据科学家和分析师的必备工具。本文通过问题解答形式,深入探讨Pandas与NumPy的高级操作技巧,如复杂数据筛选、分组聚合、数组优化及协同工作,结合实战演练,助你提升数据处理能力和工作效率。
35 5
|
14天前
|
机器学习/深度学习 数据采集 数据挖掘
解锁 Python 数据分析新境界:Pandas 与 NumPy 高级技巧深度剖析
Pandas 和 NumPy 是 Python 中不可或缺的数据处理和分析工具。本文通过实际案例深入剖析了 Pandas 的数据清洗、NumPy 的数组运算、结合两者进行数据分析和特征工程,以及 Pandas 的时间序列处理功能。这些高级技巧能够帮助我们更高效、准确地处理和分析数据,为决策提供支持。
33 2
|
15天前
|
存储 数据采集 数据处理
效率与精准并重:掌握Pandas与NumPy高级特性,赋能数据科学项目
在数据科学领域,Pandas和NumPy是Python生态中处理数据的核心库。Pandas以其强大的DataFrame和Series结构,提供灵活的数据操作能力,特别适合数据的标签化和结构化处理。NumPy则以其高效的ndarray结构,支持快速的数值计算和线性代数运算。掌握两者的高级特性,如Pandas的groupby()和pivot_table(),以及NumPy的广播和向量化运算,能够显著提升数据处理速度和分析精度,为项目成功奠定基础。
26 2
|
20天前
|
存储 数据处理 Python
Python科学计算:NumPy与SciPy的高效数据处理与分析
【10月更文挑战第27天】在科学计算和数据分析领域,Python凭借简洁的语法和强大的库支持广受欢迎。NumPy和SciPy作为Python科学计算的两大基石,提供了高效的数据处理和分析工具。NumPy的核心功能是N维数组对象(ndarray),支持高效的大型数据集操作;SciPy则在此基础上提供了线性代数、信号处理、优化和统计分析等多种科学计算工具。结合使用NumPy和SciPy,可以显著提升数据处理和分析的效率,使Python成为科学计算和数据分析的首选语言。
28 3
|
22天前
|
数据采集 数据可视化 数据处理
如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`)
本文介绍了如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`),加载历史数据,计算均线和其他技术指标,实现交易逻辑,记录和可视化交易结果。示例代码展示了如何根据均线交叉和价格条件进行开仓、止损和止盈操作。实际应用时需注意数据质量、交易成本和风险管理。
46 5
|
20天前
|
存储 数据挖掘 数据处理
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第26天】Python 是数据分析领域的热门语言,Pandas 库以其高效的数据处理功能成为数据科学家的利器。本文介绍 Pandas 在数据读取、筛选、分组、转换和合并等方面的高效技巧,并通过示例代码展示其实际应用。
31 2
|
21天前
|
存储 机器学习/深度学习 算法
Python科学计算:NumPy与SciPy的高效数据处理与分析
【10月更文挑战第26天】NumPy和SciPy是Python科学计算领域的两大核心库。NumPy提供高效的多维数组对象和丰富的数学函数,而SciPy则在此基础上提供了更多高级的科学计算功能,如数值积分、优化和统计等。两者结合使Python在科学计算中具有极高的效率和广泛的应用。
38 2
|
1月前
|
并行计算 大数据 数据处理
亿级数据处理,Pandas的高效策略
在大数据时代,数据量的爆炸性增长对处理技术提出更高要求。本文介绍如何利用Python的Pandas库及其配套工具高效处理亿级数据集,包括:采用Dask进行并行计算,分块读取以减少内存占用,利用数据库进行复杂查询,使用内存映射优化Pandas性能,以及借助PySpark实现分布式数据处理。通过这些方法,亿级数据处理变得简单高效,助力我们更好地挖掘数据价值。
61 1
|
1月前
|
机器学习/深度学习 数据采集 算法
探索Python科学计算的边界:NumPy、Pandas与SciPy在大规模数据分析中的高级应用
【10月更文挑战第5天】随着数据科学和机器学习领域的快速发展,处理大规模数据集的能力变得至关重要。Python凭借其强大的生态系统,尤其是NumPy、Pandas和SciPy等库的支持,在这个领域占据了重要地位。本文将深入探讨这些库如何帮助科学家和工程师高效地进行数据分析,并通过实际案例来展示它们的一些高级应用。
51 0
探索Python科学计算的边界:NumPy、Pandas与SciPy在大规模数据分析中的高级应用
下一篇
无影云桌面