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

相关文章
|
27天前
|
数据挖掘 数据处理 索引
Pandas高级数据处理:多级索引
Pandas的多级索引(MultiIndex)允许在一个轴上拥有多个层次的索引,适用于分层数据处理。可通过列表或已有DataFrame创建多级索引,如按日期和股票代码索引金融数据。常见问题包括索引层级混乱、数据选择困难和聚合操作复杂,解决方法分别为检查参数顺序、使用`loc`和`xs`方法选择数据、用`groupby()`进行聚合。代码案例展示了创建、调整索引层级、选择特定数据及聚合操作。
131 83
|
24天前
|
数据挖掘 Unix 数据处理
Pandas高级数据处理:管道操作
Pandas 是 Python 中流行的数据分析库,提供丰富的结构化数据处理功能。`pipe` 方法(管道操作)简化了数据处理步骤的串联,避免嵌套调用带来的代码混乱。通过定义函数并使用 `pipe` 串联,如筛选特定类别产品和计算销售额平均值,使代码更清晰易读。常见问题包括函数参数传递不正确、返回值类型不匹配及复杂逻辑难以维护。合理设计与编程习惯能充分发挥管道操作的优势,提高代码可读性和可维护性。
44 16
|
11天前
|
监控 物联网 数据处理
Pandas高级数据处理:数据流式计算
本文介绍了如何使用 Pandas 进行流式数据处理。流式计算能够实时处理不断流入的数据,适用于金融交易、物联网监控等场景。Pandas 虽然主要用于批处理,但通过分块读取文件、增量更新 DataFrame 和使用生成器等方式,也能实现简单的流式计算。文章还详细讨论了内存溢出、数据类型不一致、数据丢失或重复及性能瓶颈等常见问题的解决方案,并建议在处理大规模数据时使用专门的流式计算框架。
138 100
Pandas高级数据处理:数据流式计算
|
25天前
|
机器学习/深度学习 数据采集 算法
Pandas高级数据处理:自定义函数
Pandas是Python中强大的数据分析库,支持复杂的数据转换、计算与聚合。自定义函数在处理特殊需求时尤为重要,如数据清洗、特征工程和格式转换。使用自定义函数时需注意作用域、效率等问题,并解决常见报错如KeyError和ValueError。通过向量化操作和算法优化可提升性能。代码案例展示了如何用自定义函数计算排名和成绩等级,满足业务需求。
126 88
|
20天前
|
存储 缓存 数据处理
Pandas高级数据处理:缓存与持久化
本文介绍 Pandas 中的缓存与持久化技术,涵盖其意义、常见方式及问题解决方案。缓存可提高效率、减少重复计算;持久化则优化资源使用。文中探讨内存缓存、文件系统和数据库持久化,并提供代码示例,如 LRU 缓存、Parquet 格式保存及 SQLite 数据库交互,帮助读者理解和应用这些技术。
128 73
|
22天前
|
存储 数据挖掘 数据处理
Pandas高级数据处理:内存优化
Pandas 是流行的数据分析库,但随着数据量增加,内存使用问题日益突出。本文介绍常见内存优化问题及解决方案,包括选择合适数据类型(如 int8、float32)、使用 category 类型减少字符串内存开销、分块读取大文件避免 MemoryError 等。通过代码示例详细讲解如何优化内存使用,提高程序性能并避免错误。掌握这些技巧可显著提升 Pandas 数据处理效率。
96 58
|
6天前
|
数据可视化 数据挖掘 数据处理
Pandas高级数据处理:交互式数据探索
Pandas 是数据分析中常用的数据处理库,提供了强大的数据结构和操作功能。本文从基础到高级,逐步介绍 Pandas 中交互式数据探索的常见问题及解决方案,涵盖数据读取、检查、清洗、预处理、聚合分组和可视化等内容。通过实例代码,帮助用户解决文件路径错误、编码问题、数据类型不一致、缺失值处理等挑战,提升数据分析效率。
76 32
|
4天前
|
数据采集 数据可视化 数据处理
Pandas高级数据处理:数据仪表板制作
《Pandas高级数据处理:数据仪表板制作》涵盖数据清洗、聚合、时间序列处理等技巧,解决常见错误如KeyError和内存溢出。通过多源数据整合、动态数据透视及可视化准备,结合性能优化与最佳实践,助你构建响应快速、数据精准的商业级数据仪表板。适合希望提升数据分析能力的开发者。
57 31
|
7天前
|
存储 安全 数据处理
Pandas高级数据处理:数据安全与隐私保护
在数据驱动的时代,数据安全和隐私保护至关重要。本文探讨了使用Pandas进行数据分析时如何确保数据的安全性和隐私性,涵盖法律法规要求、用户信任和商业价值等方面。通过加密、脱敏、访问控制和日志审计等技术手段,结合常见问题及解决方案,帮助读者在实际项目中有效保护数据。
52 29
|
1天前
|
数据挖掘 数据处理 开发者
Pandas高级数据处理:实时数据处理
本文介绍了Pandas在实时数据处理中的应用,涵盖基础概念、常见问题及解决方案。Pandas是Python中强大的数据分析库,支持流式读取和增量更新数据,适用于大规模数据集的处理。通过分块读取、数据类型优化等方法,可有效解决内存不足等问题。文中还提供了代码示例,帮助读者更好地理解和掌握Pandas在实时数据处理中的使用技巧。
33 15