Python笔记----Series

Python笔记----Series
import pandas as pd
import numpy as np

'''
Pandas的数据结构:

Series
Series是带标签的一维数组,可存储整数、浮点数、字符串、Python 对象等类型的数据。轴标签统称为索引
调用pd.series函数即可创建Series
例如:s = pd.Series(data, index=index)
其中data支持Python字典,多维数组和标量值,index是轴标签列表
当data是多维数组时,index长度必须与data长度一致。没有指定index参数时,默认为数值型索引,即[0, len(data)-1]
'''

# np.random.randn(d0,d1,d2……dn) 
# 1)当函数括号内没有参数时,则返回一个浮点数; 
# 2)当函数括号内有一个参数时,则返回秩为1的数组,不能表示向量和矩阵; 
# 3)当函数括号内有两个及以上参数时,则返回对应维度的数组,能表示向量或矩阵; 
# 4)np.random.standard_normal()函数与np.random.randn()类似,但是np.random.standard_normal()的输入参数为元组(tuple). 
# 5)np.random.randn()的输入通常为整数,但是如果为浮点数,则会自动直接截断转换为整数。

# numpy.random.rand(d0,d1,…,dn)
# rand函数根据给定维度生成[0,1)之间的数据,包含0,不包含1
# dn表格每个维度
# 返回值为指定维度的array
s = pd.Series(np.random.randn(5), index=['a', 'b', 'c', 'd', 'e'])
# print(s)
# print(s.index)
s = pd.Series(np.random.randn(5))
# print(s)

# Pandas 的索引值可以重复。

'''
当data为字典时,当未设置index参数时,Series按字典的插入顺序排序索引
'''

# Series 可以用字典实例化
dic = {'a': 2, 'b': 1, 'c': 3, 'd': 5, 'e': 9}
s = pd.Series(dic)
# print(s)

# Pandas用NaN表示缺失数据
# print(pd.Series(dic, index=['b', 'a', 'c', 'd']))

'''
当data为标量值时,必须提供索引,Series按索引长度重复该标量值。
'''
# 什么是标量值?--------------------标量值代表一个数据单元或一个简单值
# print(pd.Series(5., ['b', 'a', 'c', 'd']))

'''
Series类似多维数组
Series操作与ndarray类似,支持大多数NumPy函数,还支持索引切片
'''

# print(s[0])
# print(s[:3])
# median()函数代表中位数
# print(s[s > s.median()])

'''
Series.array一般是扩展数组。简单说,扩展数组是把N个numpy.ndarray包在一起的打包器。
Pandas知道怎么把扩展数组存储到Series或DataFrame的列里。
'''
# Series.array用于提取Series数组
# 执行不用索引的操作时,如禁用自动对齐,访问数组非常有用。
# print(s.array)

# Series 只是类似于多维数组,提取真正的多维数组,要用Series.to_numpy()
# print(s.to_numpy())

'''
Series 类似固定大小的字典,可以用索引标签提取值或设置值。
'''
# print(s['a'])
# s['b'] = 12
# print(s)
# print('c' in s)
# print('e' in s)

# 使用get()方法可以提取Series里没有的标签,返回值为None,或可以指定返回值
# print(s.get('e'))
# np.nan为not a number
# print(s.get('e', np.nan))

'''
矢量操作与对齐 Series 标签
Series 和 NumPy 数组一样,都不用循环每个值,而且 Series 支持大多数 NumPy 多维数组的方法。
'''
# print(s + s)
# print(s * 3)

# Series 和多维数组的主要区别在于, Series 之间的操作会自动基于标签对齐数据。因此,不用顾及执行计算操作的 Series 是否有相同的标签。
# print(s[1:] + s[:-1])

# Series还支持name属性
# 一般情况下,Series会自动分配name,特别是提取一维 DataFrame 切片时
s = pd.Series(np.random.randn(5), name='something')
# print(s)
# print(s.name)

# 也可以使用rename方法重命名
s2 = s.rename('lsw')
print(s2.name)

Read more

深入理解 Proxy 和 Object.defineProperty

在JavaScript中,对象是一种核心的数据结构,而对对象的操作也是开发中经常遇到的任务。在这个过程中,我们经常会使用到两个重要的特性:Proxy和Object.defineProperty。这两者都允许我们在对象上进行拦截和自定义操作,但它们在实现方式、应用场景和灵活性等方面存在一些显著的区别。本文将深入比较Proxy和Object.defineProperty,包括它们的基本概念、使用示例以及适用场景,以帮助读者更好地理解和运用这两个特性。 1. Object.defineProperty 1.1 基本概念 Object.defineProperty 是 ECMAScript 5 引入的一个方法,用于直接在对象上定义新属性或修改已有属性。它的基本语法如下: javascript 代码解读复制代码Object.defineProperty(obj, prop, descriptor); 其中,obj是目标对象,prop是要定义或修改的属性名,descriptor是一个描述符对象,用于定义属性的特性。 1.2 使用示例 javascript 代码解读复制代码//

By Ne0inhk

Proxy 和 Object.defineProperty 的区别

Proxy 和 Object.defineProperty 是 JavaScript 中两个不同的特性,它们的作用也不完全相同。 Object.defineProperty 允许你在一个对象上定义一个新属性或者修改一个已有属性。通过这个方法你可以精确地定义属性的特征,比如它是否可写、可枚举、可配置等。该方法的使用场景通常是需要在一个对象上创建一个属性,然后控制这个属性的行为。 Proxy 也可以用来代理一个对象,但是相比于 Object.defineProperty,它提供了更加强大的功能。使用 Proxy 可以截获并重定义对象的基本操作,比如访问属性、赋值、函数调用等等。在这些操作被执行之前,可以通过拦截器函数对这些操作进行拦截和修改。因此,通过 Proxy,你可以完全重写一个对象的默认行为。该方法的使用场景通常是需要对一个对象的行为进行定制化,或者需要在对象上添加额外的功能。 对比 以下是 Proxy 和 Object.defineProperty 的一些区别对比: 方面ProxyObject.defineProperty语法使用 new Proxy(target,

By Ne0inhk