Pandas_数据结构
- 2019 年 12 月 30 日
- 筆記
由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 [ ]:


让心情去旅行
欣赏和喜欢你拥有的东西,而不是你没有的东西,你才能快乐。