由AI派提供学习,本文摘要有部分雷同。
知识是活的,方法更是多式多样,技术没有边界!!
`导入相关库
In [1]:
import numpy as np
import pandas as pd
`Pandas常用的数据结构有两种: Series 和 DataFrame (这些数据结构都是构建在Numpy 数组之上的,则意味着效率很高)
Series series 是一个带有名称 & 索引的一堆数组。 ·数据类型可以是整数、浮点数、字符串以及python的对象等! EG: 我们可以通过series 存储年龄: 18/19/20/21/22 操作: 只需要将要存储的数据构建成一个数组,然后赋值给data 参数即可。
#构建索引
In [2]:
name = pd.Index(["A","B","C","D","E"],name = "name")
In [ ]:
In [3]:
#构建Series
age = pd.Series(data=[18,19,20,21,22],index=name, name="user_age")
print(age)
name
A 18
B 19
C 20
D 21
E 22
Name: user_age, dtype: int64
In [ ]:
In [4]:
#指定数据类型为浮点型
age = pd.Series(data=[18,19,20,21,22],index = name,name="user_age",dtype=float)
print(age)
name
A 18.0
B 19.0
C 20.0
D 21.0
E 22.0
Name: user_age, dtype: float64
In [ ]:
Series
特点: 包含了 dict的特点,也就是意味着可以使用与dict类似的一些操作。我们可以将index中的元素看成是dict中的key。
In [6]:
#获取第一个元素
print(age[0])
18.0
In [ ]:
In [7]:
#获取前三个元素
print(age[:3])
name
A 18.0
B 19.0
C 20.0
Name: user_age, dtype: float64
In [ ]:
In [8]:
#获取年龄大女20岁的元素
print(age[age>20])
name
D 21.0
E 22.0
Name: user_age, dtype: float64
In [ ]:
获取第四个和第二个元素
In [9]:
#可以看到,无论我们通过切片如何操作 Series ,它都能够自动对齐 index。
print(age[[3,1]])
name
D 21.0
B 19.0
Name: user_age, dtype: float64
In [ ]:
Series 的向量化操作
series 与 ndarray 一样,支持向量化操作的。同时也可以传递给大多数期望ndarray的Numpy方法!
In [10]:
#针对年龄 整体+ 1
print(age + 1)
name
A 19.0
B 20.0
C 21.0
D 22.0
E 23.0
Name: user_age, dtype: float64
In [ ]:
In [11]:
print(np.exp(age))
name
A 6.565997e+07
B 1.784823e+08
C 4.851652e+08
D 1.318816e+09
E 3.584913e+09
Name: user_age, dtype: float64
In [ ]:
DataFrame
- 是一个带有 索引的二维数据结构。
- 每列可以有自己的名称,并且可以有不同的数据类型。(即可以想象是 Excel表格)
- 亦或者当成 数据库中的一张表!!!
实例
- 存储更多的用户信息
- 性别 年龄 地区
- dict 来构键,key为需要存储的信息,value 则是信息的列表。
- 然后通过 dict 传递给data参数。
In [8]:
index = pd.Index(data=["张三","李","王","年少风"],name="name")
data = {
"Sex":["男","女","女","男"],
"City":["西安","上海","北京","朝阳"]
}
user_info = pd.DataFrame(data=data, index=index)
user_info
Out[8]:
Sex City
name
张三 男 西安
李 女 上海
王 女 北京
年少风 男 朝阳
In [ ]:
#可以看到,成功构建了一个DataFrame。
In [11]:
data = [
[12,"北京"],
[18,"山西"],
[21,"上海"],
[25,"西雅图"]
]
colums = ["age","city"]
user_info = pd.DataFrame(data=data, index=index,columns=colums)
user_info
Out[11]:
age city
name
张三 12 北京
李 18 山西
王 21 上海
年少风 25 西雅图
In [ ]:
#访问行
在生成DataFrame之后,可以看到,每一行就表示某一个用户的信息。假如我要找年少风,需要如何来实现呢?
那么就是通过索引名来访问某行。 这种办法需要借助loc方法。
In [12]:
user_info.loc["年少风"]
Out[12]:
age 25
city 西雅图
Name: 年少风, dtype: object
In [17]:
#方案二
#除了通过索引名称来找到这一行数据以外,还可以通过这行所在的位置 来选择这一行。
user_info.iloc[3]
Out[17]:
age 25
city 西雅图
Name: 年少风, dtype: object
In [ ]:
#访问列
1· 如何访问如数据之外,那么下个问题来了,列如何访问呢?
2·正解---我们可以通过属性(即 列名)的方式来访问列的数据。
3· 也可以通过column的形式来访问该列的数据。
In [ ]:
# 如何获取所有用户的年龄呢?
·来波骚操作吧
In [18]:
user_info.age
Out[18]:
name
张三 12
李 18
王 21
年少风 25
Name: age, dtype: int64
In [19]:
user_info["age"]
Out[19]:
name
张三 12
李 18
王 21
年少风 25
Name: age, dtype: int64
In [20]:
#倘若你想要同时获取 年龄和城市 该如何操作呢?
# 加入列名即可
user_info[["age","city"]]
Out[20]:
age city
name
张三 12 北京
李 18 山西
王 21 上海
年少风 25 西雅图
In [21]:
#也可以变换列名的顺序,方便你的需求
user_info[["city","age"]]
Out[21]:
city age
name
张三 北京 12
李 山西 18
王 上海 21
年少风 西雅图 25
In [ ]:
#新增or删 列的操作
生成DataFrame之后,你想再加入新的信息,比如性别, 那么该如何操作呢?
1)如果所有性别都一样,我们通过传入一个标量,pandas自动会广播来填充所有位置
2)那如果有不同的呢
In [22]:
#案例1
user_info["sex"] = "男"
user_info
Out[22]:
age city sex
name
张三 12 北京 男
李 18 山西 男
王 21 上海 男
年少风 25 西雅图 男
In [ ]:
#案例2
性别不一致的情况下,我们可以通过like-list 来添加新的一列。
In [23]:
user_info["Sex_1"]=["男","女","女","男"]
user_info
Out[23]:
age city sex Sex_1
name
张三 12 北京 男 男
李 18 山西 男 女
王 21 上海 男 女
年少风 25 西雅图 男 男
In [24]:
# 想要删除其中某一列,可以使用pop方法来完成。后接列名即可!!!
user_info.pop("sex")
user_info
Out[24]:
age city Sex_1
name
张三 12 北京 男
李 18 山西 女
王 21 上海 女
年少风 25 西雅图 男
In [25]:
#假设你想要保证原有的DataFrame 不改变的话,我们可以通过 assign方法来创建新的一列。
user_info.assign(age_add_one = user_info["age"]+1)
Out[25]:
age city Sex_1 age_add_one
name
张三 12 北京 男 13
李 18 山西 女 19
王 21 上海 女 22
年少风 25 西雅图 男 26
In [26]:
# 如果性别为男 ,给它标识为1,否则为0
user_info.assign(sex_code = np.where(user_info["Sex_1"] == "男",1,0))
Out[26]:
age city Sex_1 sex_code
name
张三 12 北京 男 1
李 18 山西 女 0
王 21 上海 女 0
年少风 25 西雅图 男 1
In [ ]:
让心情去旅行
欣赏和喜欢你拥有的东西,而不是你没有的东西,你才能快乐。