前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Pandas_数据结构

Pandas_数据结构

作者头像
DataScience
发布2019-12-30 11:24:07
3040
发布2019-12-30 11:24:07
举报
文章被收录于专栏:A2DataA2Data

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

让心情去旅行

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-08-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DataScience 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档