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 字段的空值最多。

相关文章
|
1天前
|
数据挖掘 数据处理 开发者
Pandas高级数据处理:实时数据处理
本文介绍了Pandas在实时数据处理中的应用,涵盖基础概念、常见问题及解决方案。Pandas是Python中强大的数据分析库,支持流式读取和增量更新数据,适用于大规模数据集的处理。通过分块读取、数据类型优化等方法,可有效解决内存不足等问题。文中还提供了代码示例,帮助读者更好地理解和掌握Pandas在实时数据处理中的使用技巧。
33 15
|
4天前
|
数据采集 数据可视化 数据处理
Pandas高级数据处理:数据仪表板制作
《Pandas高级数据处理:数据仪表板制作》涵盖数据清洗、聚合、时间序列处理等技巧,解决常见错误如KeyError和内存溢出。通过多源数据整合、动态数据透视及可视化准备,结合性能优化与最佳实践,助你构建响应快速、数据精准的商业级数据仪表板。适合希望提升数据分析能力的开发者。
57 31
|
5天前
|
数据采集 并行计算 数据可视化
Pandas高级数据处理:数据报告生成实战指南
数据报告生成面临数据质量、计算性能、呈现形式和自动化等核心挑战。常见问题包括缺失值导致统计失真、内存溢出及可视化困难。解决方案涵盖数据清洗、分块处理、安全绘图模板等。通过模块化设计、异常处理机制和性能优化策略,如使用`category`类型、并行计算等,可大幅提升效率。最佳实践建议建立数据质量检查清单、版本控制和自动化测试框架,确保系统具备自适应能力,提升报告生成效率300%以上。
38 12
|
6天前
|
数据可视化 数据挖掘 数据处理
Pandas高级数据处理:交互式数据探索
Pandas 是数据分析中常用的数据处理库,提供了强大的数据结构和操作功能。本文从基础到高级,逐步介绍 Pandas 中交互式数据探索的常见问题及解决方案,涵盖数据读取、检查、清洗、预处理、聚合分组和可视化等内容。通过实例代码,帮助用户解决文件路径错误、编码问题、数据类型不一致、缺失值处理等挑战,提升数据分析效率。
76 32
|
7天前
|
存储 安全 数据处理
Pandas高级数据处理:数据安全与隐私保护
在数据驱动的时代,数据安全和隐私保护至关重要。本文探讨了使用Pandas进行数据分析时如何确保数据的安全性和隐私性,涵盖法律法规要求、用户信任和商业价值等方面。通过加密、脱敏、访问控制和日志审计等技术手段,结合常见问题及解决方案,帮助读者在实际项目中有效保护数据。
52 29
|
8天前
|
存储 安全 数据处理
Pandas高级数据处理:数据加密与解密
本文介绍如何使用Pandas结合加密库(如`cryptography`)实现数据加密与解密,确保敏感信息的安全。涵盖对称和非对称加密算法、常见问题及解决方案,包括密钥管理、性能优化、字符编码和数据完整性验证。通过示例代码展示具体操作,并提供常见报错的解决方法。
47 24
|
10天前
|
存储 算法 数据处理
Pandas高级数据处理:数据压缩与解压
本文介绍 Pandas 中的数据压缩与解压技术,探讨其在大数据集存储、远程传输和备份归档中的应用场景。Pandas 支持多种压缩格式(如 `.gzip`、`.bz2`、`.zip`),通过 `compression` 参数轻松实现数据的压缩与解压。文中还提供了常见问题的解决方案,如文件扩展名不匹配、内存不足和性能优化,并介绍了自动检测压缩格式和组合压缩加密的高级技巧。掌握这些功能可显著提升数据处理效率。
46 20
|
11天前
|
监控 物联网 数据处理
Pandas高级数据处理:数据流式计算
本文介绍了如何使用 Pandas 进行流式数据处理。流式计算能够实时处理不断流入的数据,适用于金融交易、物联网监控等场景。Pandas 虽然主要用于批处理,但通过分块读取文件、增量更新 DataFrame 和使用生成器等方式,也能实现简单的流式计算。文章还详细讨论了内存溢出、数据类型不一致、数据丢失或重复及性能瓶颈等常见问题的解决方案,并建议在处理大规模数据时使用专门的流式计算框架。
138 100
Pandas高级数据处理:数据流式计算
|
12天前
|
数据采集 数据挖掘 物联网
Pandas高级数据处理:实时数据处理
本文介绍了如何使用Pandas进行实时数据处理,涵盖从基础到高级的技巧。Pandas作为Python中流行的数据处理库,提供了高效的DataFrame和Series结构,适用于金融、社交媒体和物联网等领域的数据分析。文章详细讲解了数据读取、清洗、转换及常见问题的解决方案,如内存不足、数据不一致和性能瓶颈,并提供了避免常见报错的方法,帮助读者更高效地处理实时数据。
53 15
|
13天前
|
存储 数据采集 数据挖掘
Pandas高级数据处理:数据流处理
Pandas是Python中高效处理数据分析的流行库。随着数据量增长,传统的批量处理方式难以满足实时性需求,掌握Pandas的数据流处理技术尤为重要。常见问题包括文件格式不兼容、内存不足、缺失值和重复数据等。针对这些问题,可以通过指定参数读取文件、分块读取、填充或删除缺失值、去除重复数据、转换数据类型等方法解决。此外,还需注意KeyError、ValueError和MemoryError等常见报错,并采取相应措施。掌握这些技巧可提高数据处理效率和准确性。
54 26