Pandas 第二章 数据结构基础

本文介绍了Python的基本数据结构,包括不可变的数字、字符串、元组和可变的列表、字典及集合。特别地,详细讲解了字符串的切片、操作和转换方法,以及列表的常用操作。此外,文章还概述了Pandas的Series和DataFrame,它们是数据分析的重要工具,用于组织和操作一维和二维数据。
摘要由CSDN通过智能技术生成

1.Python的数据结构

不可变数据:Number(数字)、String(字符串)、Tuple(元组)
可变数据:List(列表)、Dictionary(字典)、Set(集合)

可以用Python内置的type()函数查看数据的类型

也可以用isinstance来判断数据是不是指定的类型:

isinstance(123, int) # 123是不是整型值
# True

1.1 数字

x = 1    # int, 整型
y = 1.2  # float, 
浮点z = 1j   # complex, 复数
a ** b # 表示10的21次幂
b % a # 1 (取余)
# 地板除,相除后只保留整数部分,即向下取整
# 但如果其中一个操作数为负数,则取负无穷大方向距离结果最近的整数
9//2 #4
9.0//2.0 # 4.0
-11//3# -4

1.2 字符串

可以对字符串进行切片访问,字符串从左往右,索引从0开始;从右往左,索引从–1开始。可以取字符串中的片段,切片索引按左闭右开原则:

var = 'Hello World!'
# 按索引取部分内容,索引从0开始, 左必须小于右
# 支持字符、列表、元组
# 从右往左,索引从-1开始
var[-1] # '!'
var[-3:-1] # 'ld'
var[1:7] # 'ello W'(有个空格,不包含最后一位索引7)
var[6:] # 'World!' (只指定开头,包含后面所有的字符)
var[:] # 'Hello World!'(相当于复制)
var[0:5:2] # 'Hlo'(2为步长,按2的倍数取)
var[1:7:3] # 'ello W' -> 'eo'
var[::-1] # '!dlroW olleH'(实现反转字符功能)
len('good') # 4 (字符的长度)
'good'.replace('g', 'G') # 'Good' (替换字符)
'山-水-风-雨'.split('-') # ['山', '水', '风', '雨'] (用指定字符分隔,默认空格)
'-'.join(['山','水','风','雨']) # '山-水-风-雨'
'和'.join(['诗', '远方']) #'诗和远方'
'good'.upper() # 'GOOD'(全转大写)
'GOOD'.lower() # 'good'(全转小写)
'Good Bye'.swapcase() #'gOOD bYE' (大小写互换)
'good'.capitalize() # 'Good' (首字母转大写)
'good'.islower() # True(是否全是小写)
'good'.isupper() # False (是否全是大写)
'3月'.zfill(3) # '03月' (指定长度,如长度不够,前面补0)

1.3列表

列表是用方括号[]组织起来的,每个元素用逗号隔开,每个具体元素可以是任意类型的内容。

x = [] # 空列表
x = [1, 2, 3, 4, 5]
type(x) # list 类型检测
a = [1, 2, 3]
len(a) # 3(元素个数)
max(a) # 3(最大值)
min(a) # 1(最小值)
sum(a) # 6(求和)
a.index(2) # 1(指定元素位置)
a.count(1) # 1(求元素的个数)
for i in a: print(i) # 迭代元素
sorted(a) # 返回一个排序的列表,但不改变原列表
any(a) # True(是否至少有一个元素为真)
all(a) # True(是否所有元素为真)
a.append(4) #a: [1, 2, 3, 4](增加一个元素)
a.pop() # 每执行一次,删除最后一个元素
a.extend([9,8]) # a: [1, 2, 3,9, 8](与其他列表合并)
a.insert(1, 'a') # a: [1, 'a',2, 3](在指定索引位插入元素,索引从0开始)
a.remove(1)# 删除第一个指定元素
a.clear() # [](清空)
列表的推导式
# 将一个可迭代的对象展开,形成一个列表
[i for i in range(5)]# [0, 1, 2, 3, 4]
# 可以将结果进行处理
['第'+str(i) for i in range(5)]# ['第0', '第1', '第2','第3', '第4']
# 可以进行条件筛选,实现取偶数[i for i in range(5) if i%2==0]
# 拆开字符,过滤空格,全变成大写[i.upper() for i in 'Hello world' if i != ' ']
# ['H', 'E', 'L', 'L', 'O', 'W', 'O', 'R','L', 'D']

1.4 元组

元组(tuple)跟列表(list)非常相似,二者之间的差异是元组不可改变,而列表是可以改变的。元组使用圆括号(),列表使用方括号[]。

1.5 字典

字典是Python重要的数据结构,由键值对组成。我们用属性(key)和值(value)组成“键值对”(key-value)这样的数据结构。

d = {} # 定义空字典
d = dict() # 定义空字典d = {'a': 1, 'b': 2, 'c': 3}
d = {'a': 1, 'a': 1, 'a': 1} # {'a': 1} key不能重复,重复时取最后一个
d = {'a': 1, 'b': {'x': 3}} # 嵌套字典
d = {'a': [1,2,3], 'b': [4,5,6]} # 嵌套列表

# 以下均可定义如下结果# {'name': 'Tom', 'age': 18, 'height': 180}
d = dict(name='Tom', age=18, height=180)
d = dict([('name', 'Tom'), ('age', 18), ('height', 180)])
d = dict(zip(['name', 'age', 'height'], ['Tom', 18, 180]))
访问字典
d['name']  # 'Tom'(获取键的值)
d['age'] = 20  # 将age的值更新为20
d['Female'] = 'man'  # 增加属性
d.get('height', 180)  # 180
嵌套取值
d = {'a': {'name': 'Tom','age':18}, 'b': [4,5,6]}
d['b'][1] # 5
d['a']['age'] # 18
# 按类型访问,可迭代
d.keys() # 列出所有键
d.values() # 列出所有值
d.items() # 列出所有键值对元组(k, v)
d2 = d.copy() # 深拷贝,d变化不影响d2

1.6集合

集合(set)是存放无顺序、无索引内容的容器。在Python中,集合用花括号{}表示。我们用集合可以消除重复的元素,也可以用它作交、差、并、补等数学运算。

s = {} # 空集合
s = {'5元', '10元', '20元'} # 定义集合
type(s) # set(类型检测)

2 Pandas的数据结

2.1 Series

Series(系列、数列、序列)是一个带有标签的一维数组,这一系列连续的数据代表了一定的业务意义。

2.2 DataFrame

DataFrame意为数据框,它就像一个存放数据的架子,有多行多列,每个数据在一个格子里,每个格子有自己的编号。

横向的称作行(row),我们所说的一条数据就是指其中的一行;
纵向的称作列(column)或者字段,是一条数据的某个值;
第一行是表头,或者叫字段名,类似于Python字典里的键,代表数据的属性;
第一列是索引,就是这行数据所描述的主体,也是这条数据的关键;
在一些场景下,表头和索引也称为列索引和行索引;

2.3 索引

索引(index):行和列上的标签,标识二维数据坐标的行索引和列索引,默认情况下,指的是每一行的索引。如果是Series,那只能是它行上的索引。列索引又被称为字段名、表头。
自然索引、数字索引:行和列的0~n(n为数据长度–1)形式的索引,数据天然具有的索引形式。虽然可以指定为其他名称,但在有些方法中依然可以使用。
标签(label):行索引和列索引,如果是Series,那只能是它行上的索引。
轴(axis):仅用在DataFrame结构中,代表数据的方向,如行和列,用0代表列(默认),1代表

 3  Pandas生成数

3.1 导入Pandas

import pandas as pd
import numpy as np

3.2 创建数据

df = pd.DataFrame({'国家': ['中国', '美国', '日本'],
                   '地区': ['亚洲', '北美', '亚洲'],
                   '人口': [13.97, 3.28, 1.26]
,                   'GDP': [14.34, 21.43, 5.08]})

DataFrame中选取一列就会返回一个Series

3.3  生成DataFrame

df = pd.DataFrame(data=None, index=None, columns=None)

data:具体数据,结构化或同构的ndarray、可迭代对象、字典或DataFrame。
index:索引,类似数组的对象,支持解包,如果没有指定,会自动生成RangeIndex (0, 1, 2, …, n)。
columns:列索引、表头,如果没有指定,会自动生成RangeIndex (0, 1, 2, …, n)

1)字典

d = {'国家': ['中国', '美国', '日本'],
     '人口': [14.33, 3.29, 1.26]}
df = pd.DataFrame(d)

指定索引名
df = pd.DataFrame(d, index=['a', 'b', 'c'])

2)Series组成的字典

d = {'x': pd.Series([1., 2., 3.], index=['a', 'b', 'c']),
     'y': pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)

3) 字典组成的列表

# 定义一个字典列表
data = [{'x': 1, 'y': 2}, {'x': 3, 'y': 4, 'z': 5}]
# 生成DataFrame对象
pd.DataFrame(data)
# 指定索引
pd.DataFrame(data, index=['a', 'b'])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值