Pandas学习(1、pandas数据结构介绍)

一、Series

import pandas as pd

'''pandas数据结构介绍'''

#1、Series
'''Series是一种一维的数组型对象,它包含了一个值序列(类似NumPy中的类型),并且包含了数据标签(也就是index-索引)'''
obj = pd.Series([4, 7, -5, 3])
# print(obj)
'''
0    4
1    7
2   -5
3    3
dtype: int64
'''
# print(obj.values) #返回:[ 4  7 -5  3]
# print(obj.index) #返回:RangeIndex(start=0, stop=4, step=1)

#通常需要创建一个索引序列,用标签标识每个数据点:
obj2 = pd.Series([4, 7, -5, 3], index=['d', 'b', 'a', 'c'])
# print(obj2)
'''
d    4
b    7
a   -5
c    3
dtype: int64
'''
# print(obj2['b']) #返回7
# print(obj2[obj2 > 0])
'''
d    4
b    7
c    3
dtype: int64
'''
# print('b' in obj2) #返回True

#如果已经有数据包含在Python字典里,可以使用字典生成一个Series:
sdata = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
obj3 = pd.Series(sdata)
# print(obj3)
'''
a    1
b    2
c    3
d    4
dtype: int64
'''

#如果想要按照自己的顺序传递来构造函数,可以这么做:
states = ['c', 'b', 'e']
obj4 = pd.Series(sdata, index=states)
# print(obj4)
'''
c    3.0
b    2.0
e    NaN #这里因为sdata里没有e的值,所以用NaN代替
dtype: float64
'''
# print(pd.isnull(obj4)) #缺失值的位置返回True
# print(pd.notnull(obj4)) #非缺失值的位置返回True

#Series中很重要的一个特性是“自动对齐索引”,两个不同的Series可以根据索引自动组合操作(比如加减乘除)
# print(obj3 + obj4)
'''
a    NaN
b    4.0
c    6.0
d    NaN
e    NaN
dtype: float64
'''

#Series对象自身和其索引都有name属性,这个特性与pandas其他重要功能集成在一期
obj4.name = 'population'
obj4.index.name = 'state'
print(obj4)
'''
state
c    3.0
b    2.0
e    NaN
Name: population, dtype: float64
'''

二、DataFrame

import pandas as pd
import numpy as np

#2、DataFrame
'''DataFrame表示的是矩阵的数据表,它包含已排序的列集合,每一列可以是不同的值类型(数值、字符串、布尔值等)。DataFrame既有行索引也有列索引,它可以被视为同一个共享相同索引的Series的字典。在DataFrame中,数据被存储为一个以上的二维块,而不是列表、字典或其他一维数组的集合。'''

data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
        'year': [2000, 2001, 2002, 2001, 2002, 2003],
        'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
frame = pd.DataFrame(data)
print(frame)

# head选择头部的五行
print(frame.head())

#如果指定了列的顺序,DataFrame的列将会按照制定顺序排列
print(pd.DataFrame(data, columns=['year', 'state']))

#如果传的列不包含在字典中,将会在结果中出现缺失值
frame2 = pd.DataFrame(data, columns=['year', 'state', 'pop', 'debt'], index=['one', 'two', 'three', 'four', 'five', 'six'])
print(frame2)

#下面是打印单列的两种方式:
print(frame2['year'])
print(frame2.state)

#用loc可以选取某些行
print(frame2.loc[['three', 'four']])

#列的引用是可以修改的,比如frame2里的空列:'debt'赋值为标量值或值数组:
frame2['debt'] = 16.5 #把这一列改为同一个值
frame2['debt'] = np.arange(6.) #将列表或数组赋值给一个列时,值的长度必须和DataFrame的长度相匹配

#将Series赋值给一列时,Series的索引将会按照DataFrame的索引重新排列,并在空缺的地方填充缺失值:
val = pd.Series([-1.2, -1.5, -1.7], index=['two', 'four', 'five'])
frame2['debt'] = val
print(frame2)

#如果被赋值的列并不存在,则会生成一个新的列。del可以用来删除列
frame2['eastern'] = frame2.state == 'Ohio'
#注:frame2.eastern的语法无法创建新的列!
del frame2['eastern'] #删除列

#另一种常用的数据形式是包含字典的嵌套字典:
pop = {'Nevada': {2001: 2.4, 2002: 2.9},
       'Ohio': {2000: 1.5, 2001: 1.7, 2002: 3.6}}
frame3 = pd.DataFrame(pop)
'''
      Nevada  Ohio
2000     NaN   1.5
2001     2.4   1.7
2002     2.9   3.6
'''

#可以对DataFrame进行转置操作(调换行和列):
print(frame3.T)

#内部字典的键被联合、排序后形成了结果的索引。如果已经显式指明索引的话,内部字典的键将不会被排序:
print(pd.DataFrame(pop, index=pd.Series([2000, 2001, 2002]))) #注,这里如果直接用index=[2000, 2001, 2002]会报错!

#包含Series的字典也可以用于构造DataFrame:
pdata = {'Ohio': frame3['Ohio'][:-1],
         'Nevada': frame3['Nevada'][:2]}
print(pd.DataFrame(pdata))

#如果DataFrame的索引和列拥有name属性,则这些name属性也会被显示:
frame3.index.name = 'year'; frame3.columns.name = 'state'
print(frame3)
'''
state  Nevada  Ohio
year               
2000      NaN   1.5
2001      2.4   1.7
2002      2.9   3.6
'''

#和Series类似,DataFrame的values属性会将包含在DataFrame中的数据以二维ndarray的形式返回:
# print(frame3.values)
#如果DataFrame的列是不同的dtypes,则values的dtype会自动选择适合所有列的类型

'''
表:DataFrame构造函数的有效输入
类型                       注释
2D ndarray                 数据的矩阵,行和列的标签是可选参数
数组、列表和元素构成的字典   每个序列成为DataFrame的一列,所有的序列必须长度相等
NumPy结构化/记录化数组      与数组构成的字典一致
Series构成的字典            每个值成为一列,每个Series的索引联合起来形成结果的行索引,也可以显式地传递索引
字典构成的字典              每一个内部字典成为一列,键联合起来形成结果的行索引
字典或Series构成的列表      列表中的一个元素形成DataFrame的一行,字典键或Series索引联合起来形成DataFrame的列标签
列表或元组构成的列表        与2D ndarray的情况一致
其他DataFrame              如果不显示传递索引,则会使用原DataFrame的索引
NumPy MaskedArray          与2D ndarray的情况类似,但隐蔽值会在结果DataFrame中成为NA/缺失值
'''

三、索引对象

import pandas as pd
import numpy as np

'''pandas中的索引对象是用于存储轴标签和其他元数据的(例如轴名称或标签)。在构造Series或DataFrame时,你所使用的任意数组或标签序列都可以在内部转换为索引对象'''
obj = pd.Series(range(3), index=['a', 'b', 'c'])
index = obj.index
print(index[1:]) #返回:Index(['b', 'c'], dtype='object')

#索引对象是不可变的,因此用户是无法修改索引对象的,不变性使得在多种数据结构中分享索引对象更为安全
# index[1] = 'd' #这里会报错,TypeError

#与Python集合不同,pandas索引对象可以包含重复标签,根据重复标签进行筛选,会选取所有重复标签对应的数据:
dup_labels = pd.Index(['foo', 'foo', 'bar', 'bar'])
print(dup_labels) #返回:Index(['foo', 'foo', 'bar', 'bar'], dtype='object')

'''
表:一些索引对象的方法和属性
方法              描述
append            将额外的索引对象粘贴到原索引后,产生一个新的索引
difference        计算两个索引的差集
intersection      计算两个索引的交集
union             计算两个索引的并集
isin              计算表示每一个值是否在传值容器中的布尔数组
delete            将位置i的元素删除,并产生新的索引
drop              根据传参删除指定索引值,并产生新的索引
insert            在位置i插入元素,并产生新的索引
is_monotonic      如果索引序列递增则返回True
is_unique         如果索引序列唯一则返回True
unique            计算索引的唯一值序列  
'''
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
未来社区的建设背景和需求分析指出,随着智能经济、大数据、人工智能、物联网、区块链、云计算等技术的发展,社区服务正朝着数字化、智能化转型。社区服务渠道由分散向统一融合转变,服务内容由通用庞杂向个性化、服务导向转变。未来社区将构建数字化生态,实现数据在线、组织在线、服务在线、产品智能和决策智能,赋能企业创新,同时注重人才培养和科研平台建设。 规划设计方面,未来社区将基于居民需求,打造以服务为中心的社区管理模式。通过统一的服务平台和应用,实现服务内容的整合和优化,提供灵活多样的服务方式,如推送式、订阅式、热点式等。社区将构建数据与应用的良性循环,提高服务效率,同时注重生态优美、绿色低碳、社会和谐,以实现幸福民生和产业发展。 建设运营上,未来社区强调科学规划、以人为本,创新引领、重点突破,统筹推进、整体提升。通过实施院落+社团自治工程,转变政府职能,深化社区自治法制化、信息化,解决社区治理中的重点问题。目标是培养有活力的社会组织,提高社区居民参与度和满意度,实现社区治理服务的制度机制创新。 未来社区的数字化解决方案包括信息发布系统、服务系统和管理系统。信息发布系统涵盖公共服务类和社会化服务类信息,提供政策宣传、家政服务、健康医疗咨询等功能。服务系统功能需求包括办事指南、公共服务、社区工作参与互动等,旨在提高社区服务能力。管理系统功能需求则涉及院落管理、社团管理、社工队伍管理等,以实现社区治理的现代化。 最后,未来社区建设注重整合政府、社会组织、企业等多方资源,以提高社区服务的效率和质量。通过建立社区管理服务综合信息平台,提供社区公共服务、社区社会组织管理服务和社区便民服务,实现管理精简、高效、透明,服务快速、便捷。同时,通过培育和发展社区协会、社团等组织,激发社会化组织活力,为居民提供综合性的咨询和服务,促进社区的和谐发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值