python数据加工1

本文围绕Python中随机数和数组操作展开。介绍了用random模块生成随机数,以及用Numpy生成随机数组的方法。还阐述了数组的创建、切片读取、浅拷贝和深拷贝、形状重构及计算等操作,如用多种函数创建数组,通过reshape等方法重构数组形状。

随机数

如何一次生成一个随机数?用random模块

设置种子数:random.seed()

#随机生成一个整数
import random
random.seed(3)
for i in [1,2,3,4,5]:    
    random.seed(3)
    print(random.randint(1,100))
    print(random.randint(1,100))
31
76
31
76
31
76
31
76
31
76
#随机生成一个实数
random.uniform(-10,10)
#保留小数点后三位有效
round(random.uniform(-10,10),3)

如何一次生成一个“随机数组”?

用Numpy生成一个随机数组的基本步骤:

  • 第一步,通过np.random.RandomState 定义一个随即变量的生成器rand
  • 第二步,根据目标数组的特征(如服从均匀分布或是正态分布),选择生成器rand具体方法,如rand.randint(),rand.rand(),rand.randn()

(1)生成整数。例:生成一个3*6的矩阵,矩阵的每个元素的取值范围为[0,10]之间的整数

import numpy as np
rand=np.random.RandomState(32)#参数32为随机数种子数
x = rand.randint(0,10,(3,6)) #(3,6)为目标数组的形状
print(x)
[[7 5 6 8 3 7]
 [9 3 5 9 4 1]
 [3 1 2 3 8 2]]

(2)生成服从均匀分布的浮点数(实数)数组,如生成一个含有5个元素的数组

#rand.rand()返回值的取值为[0,1],“*10”的慕斯是“调整所有生成随机数的取值范围”
x = rand.rand(5)*10
print(x)
[6.76485756 6.30236437 3.56365709 0.6665021  8.90436786]

(3)生成服从正态分布的浮点数(实数)数组,如生成一个含所有5个元素且服从正太分布的数组

y = rand.randn(5)+5
y

array([4.95533055, 5.03929423, 2.50675939, 3.20330251, 4.72473022])

(4)生成等距数列,如产生一个含有20个元素的等距数列,其中每个元素的取值范围为[0,10]

x = np.linspace(0,10,20)
x
array([ 0.        ,  0.52631579,  1.05263158,  1.57894737,  2.10526316,
        2.63157895,  3.15789474,  3.68421053,  4.21052632,  4.73684211,
        5.26315789,  5.78947368,  6.31578947,  6.84210526,  7.36842105,
        7.89473684,  8.42105263,  8.94736842,  9.47368421, 10.        ])

数组

ndarry是python常用扩展包numpy的灵魂,代表一种特殊的数据结构——n维数组。虽然python基础功能中没有提供数组,但可以通过列表和元组实现类似数组的功能

创建数组

第一类方法:用np.arange()

myArray1 = np.arange(1,10)
myArray1

第二类方法:用np.array()

myArray2 = np.array([1,2,3,4,5])
myArray2

第三类方法:用np.zeros()、np.ones()等函数

myArray3 = np.zeros((5,5))
myArray3
myArray4 = np.ones((5,5))
myArray4

第四类方法:用np.full()创建相同元素的数组、

np.full((3,5),2)

第五类方法:用np.random生成随机数组

rand = np.random.RandomState(1)
myArrag5 = rand.randint(0,100,[3,5])
myArrag5 

切片/读取

切片操作中,规则为“左包含右不包含”

python中变量名之后的[]和[[]]的区别:

一个方括号:                                     切片操作-------------------有规则切片:myList[1:9:3]

嵌套的两个方括号[[]]:                         Fancy Indexing ----------不规则切片:myList[[1,2,4]]

浅拷贝和深拷贝

浅拷贝:复制过来的是“引用”,即“复制对象和被复制对象共享一个存储空间,二者并不是相互独立的”

import numpy as np
myArray1 = np.array(range(0,10))
myArray2 = myArray1
myArray2[1] = 100#此处修改了myArray2的取值
myArray1
array([  0, 100,   2,   3,   4,   5,   6,   7,   8,   9])

深拷贝:复制过来的是“值”,即“复制对象和被复制对象占用两个不同空间,二者是相互独立的”

深拷贝的方法:copy()

import numpy as np
myArray1 = np.array(range(0,10))
myArray2 = myArray1.copy()
myArray2[1] = 100#此处修改了myArray2的取值
myArray1
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

形状与重构

重构的含义为“返回一个符合新形状要求的数组”

(1)用方法reshape(),返回一个新的数组

输入: 

MyArray6 = MyArray5.reshape(5,4)
MyArray6

输出 

array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12],
       [13, 14, 15, 16],
       [17, 18, 19, 20]])

输入 

MyArray5.shape

输出 

(20,)

输入 

MyArray5

输出 


MyArray5
array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,
       18, 19, 20])

(2)用resize()方法更改数组本身的形状,即“就地修改”

MyArray5.resize(4,5)
MyArray5
array([[ 1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10],
       [11, 12, 13, 14, 15],
       [16, 17, 18, 19, 20]])

(3)用swapaxes()方法进行轴交换,如时间矩阵转置

MyArray5.swapaxes(0,1)
array([[ 1,  6, 11, 16],
       [ 2,  7, 12, 17],
       [ 3,  8, 13, 18],
       [ 4,  9, 14, 19],
       [ 5, 10, 15, 20]])

 

MyArray5
array([[ 1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10],
       [11, 12, 13, 14, 15],
       [16, 17, 18, 19, 20]])

 

(4)用flatten()方法将多维数组转成一维数组

MyArray5.flatten()

 

array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,
       18, 19, 20])

(5)用tolist()方法将多维数组转换为嵌套列表

MyArray5.tolist()
[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15], [16, 17, 18, 19, 20]]

(6)可以重设数组元素的数据类型

MyArray5.astype(np.float)
array([[ 1.,  2.,  3.,  4.,  5.],
       [ 6.,  7.,  8.,  9., 10.],
       [11., 12., 13., 14., 15.],
       [16., 17., 18., 19., 20.]])

ndarray的计算

  • 横向拆分--------------split()方法

输入

x = np.array([11,12,13,14,15,16,17,18])
x1,x2,x3 = np.split(x,[2,4])
print(x1,x2,x3)

输出

[11 12] [13 14] [15 16 17 18]

 

### Python 数据清洗与加工方法及常用库 #### 常用的数据清洗和加工库 在数据科学领域,Python 提供了许多强大的库来支持数据清洗和预处理工作。以下是几个最常用的库及其功能: 1. **Pandas**: Pandas 是一个非常流行的开源数据分析库,提供了高效的数据结构以及用于操作关系型或标记型数据的功能[^1]。它能够轻松完成诸如缺失值填充、重复值删除、数据转换等任务。 2. **NumPy**: NumPy 是另一个基础的数值计算扩展模块,在许多情况下可以作为底层支持工具配合 pandas 使用。通过 numpy 可以实现复杂的数组运算和矩阵变换,这对于某些特定类型的数清理非常重要。 3. **Tushare**: Tushare 是专注于金融市场的第三方 python 库, 它不仅提供股票行情下载服务还包含了大量经济指标API接口调取等功能[^2], 这对于获取高质量原始财务报表或者市场动态信息十分有用. 4. **Matplotlib/Seaborn (可视化辅助)**: 虽然严格意义上不属于直接参与数据清洁工作的范畴之内,但是良好的图形展示有助于发现潜在错误模式并验证修正后的效果准确性;因此可视化的技能同样不可或缺于整个流程当中。 #### 示例代码片段 下面给出一段简单的例子演示如何利用上述提到的一些技术手段来进行初步的数据整理: ```python import pandas as pd import numpy as np # 创建样本 DataFrame data = {'A': [1, 2, None], 'B': ['foo', '', 'bar'], 'C': [True, False, True]} df = pd.DataFrame(data) print("Original Dataframe:") print(df) # 处理缺失值 - A 列中的 NA 替换为均值 mean_a = df['A'].mean() df['A'] = df['A'].fillna(mean_a) # 清洗字符串列 B 移除空白项 df['B'] = df['B'].replace('', np.nan).dropna() # 将布尔类型转成整数形式表示 df['C'] = df['C'].astype(int) print("\nProcessed Dataframe:") print(df) ``` 此脚本展示了三个常见的数据准备工作步骤:填补丢失数字字段平均值得到新值;移除非有效文本记录;最后把逻辑标志位映射成为可量化度量标准以便后续统计分析应用更加方便快捷。 #### 结论 综上所述,掌握这些核心组件可以帮助开发者更有效地执行他们的项目需求——无论是简单的小规模实验还是大规模生产环境下的复杂算法模型构建都能游刃有余应对自如.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值