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 [ ]:  

让心情去旅行

欣赏和喜欢你拥有的东西,而不是你没有的东西,你才能快乐。