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

pandasNote1

作者头像
皮大大
发布2021-03-01 17:26:57
1.2K0
发布2021-03-01 17:26:57
举报
import numpy as np
import pandas as pd
from pandas import Series, DataFrame

Series创建

  • 基本知识
    • 类似于一维数组的对象
    • 由一组数据(各种Numpy数据类型)和数据标签(索引)组成
    • 左边索引,右边数值;
  • 不指定索引的话,自动从0开始;
  • 索引也可以自定义:index=[‘a’, ‘b’, ‘c’, ‘d’]
  • 通过Python的字典类型创建
obj = pd.Series([4, 7, 8, -1])
obj
0    4
1    7
2    8
3   -1
dtype: int64
# 指定索引值
obj1 = pd.Series([1, 2, 3, 4], 
                 index=['a', 'b', 'c', 'd'])
obj1
a    1
b    2
c    3
d    4
dtype: int64
# 通过字典的形式创建Series数据
# S中的索引就是原来字典中的键
data1 = {"city": "shenzhen", "age": 25, "number": 123456}
obj2 = pd.Series(data1)
obj2
city      shenzhen
age             25
number      123456
dtype: object

Series中值的获取

  • 通过索引的方式获取
    • 使用Series自己创建时候的索引
    • 使用默认的数值索引
    • 使用布尔型数组、标量乘法、应用函数等作为索引
# 通过自己创建的索引来获取数据
obj1[['a', 'c', 'b']]
a    1
c    3
b    2
dtype: int64
# 默认数值索引来获取数据
obj1[:3]
a    1
b    2
c    3
dtype: int64
# 布尔型数组过滤掉不满足要求的数据
obj1[obj1 >= 2]
b    2
c    3
d    4
dtype: int64

索引操作

索引多样性
  • 自建索引
  • 默认的数值索引
  • 通过Python的字典形式来创建索引
# 上面的obj1
obj1
a    1
b    2
c    3
d    4
dtype: int64
obj1['b']
2
# 通过切片形式,包含末端,和Python1不同
obj1["a":"c"]
a    1
b    2
c    3
dtype: int64
obj1[["b", "a", "d"]]
b    2
a    1
d    4
dtype: int64
obj1[1]
2
obj1[1:4]
b    2
c    3
d    4
dtype: int64
obj1[[1, 3]]
b    2
d    4
dtype: int64
obj1[obj1 > 2]
c    3
d    4
dtype: int64
索引缺失值处理
  • 缺失值用NaN表示
  • isnullnotnull检测缺失值
# 上面的obj2
obj2
city      shenzhen
age             25
number      123456
dtype: object
# sex对应的值找不到,用NaN表示
data2 = ["sex", "city", "age", "number"]
obj3 = pd.Series(obj2, index=data2)
obj3
sex            NaN
city      shenzhen
age             25
number      123456
dtype: object
pd.isnull(obj3)
sex        True
city      False
age       False
number    False
dtype: bool
# Series的实例方法isnull和notnull
obj3.isnull()
sex        True
city      False
age       False
number    False
dtype: bool
Series对象的name属性
  • S数据本身和索引都有name属性
  • 能够直接指定name属性的值
# S的name属性
obj3.name = "person"
# S索引的name属性
obj3.index.name = "information"
obj3
information
sex            NaN
city      shenzhen
age             25
number      123456
Name: person, dtype: object
索引就地修改
# 上面栗子中的number修改为phone_num
obj3.index = ["sex", "city", "age", "phone_num"]
obj3
sex               NaN
city         shenzhen
age                25
phone_num      123456
Name: person, dtype: object

DataFrame

  • 表格型数据结构,含有一组有序的列
  • 既有行索引也有列索引
DF创建
  • 使用pd.DataFrame(data)
  • 直接传入字典型数据
  • 通过columns参数指定各个属性的顺序
# 1.通过传入等长列表或者Numpy数组组成的字典
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
        'year': [2000, 2001, 2002, 2001, 2002, 2003],
        'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
frame = pd.DataFrame(data)
frame

state

year

pop

0

Ohio

2000

1.5

1

Ohio

2001

1.7

2

Ohio

2002

3.6

3

Nevada

2001

2.4

4

Nevada

2002

2.9

5

Nevada

2003

3.2

# 2. 指定列序列创建,通过columns参数
# 结果中3个列属性和上面的顺序不同
pd.DataFrame(data, columns=["year", "state", "pop"])

year

state

pop

0

2000

Ohio

1.5

1

2001

Ohio

1.7

2

2002

Ohio

3.6

3

2001

Nevada

2.4

4

2002

Nevada

2.9

5

2003

Nevada

3.2

# 3、columns中的属性如果不存在,则结果中用缺失值代替,debt属性
# 4、在DF中传入指定的index,有one-six
frame2 = pd.DataFrame(data, columns=["year", "state", "pop", "debt"],
                      index=["one", "two", "three", "four", "five", "six"])
frame2

year

state

pop

debt

one

2000

Ohio

1.5

NaN

two

2001

Ohio

1.7

NaN

three

2002

Ohio

3.6

NaN

four

2001

Nevada

2.4

NaN

five

2002

Nevada

2.9

NaN

six

2003

Nevada

3.2

NaN

DF操作1

  • 1、查看DF中有哪些列属性columns和索引index
  • 2、查看DF中的所有数据values,通过属性的方式
  • 3、查看DF中的部分数据
    • 查看列数据
      • 通过字典标记或者属性(.点)的方式
      • 获取到的其实就是个S型数据
      • frame[column] # 更通用
      • frame.column # 属性的形式
    • 查看行数据
      • loc # 标签索引查看
      • iloc # 整数索引查看
  • 4、通过赋值修改某列的数据
    • 传入具体数值数据
    • 传入numpy生成的数据
    • 传入S型数据,长度需要和D型数据一致,否则空位上将被填上缺失值
    • 赋值新的列:如果操作的列不存在,则会自动创建
# 1、获取DF中的列属性和索引
print(frame2.columns)
print(frame2.index)
Index(['year', 'state', 'pop', 'debt'], dtype='object')
Index(['one', 'two', 'three', 'four', 'five', 'six'], dtype='object')
# 2、查看values
frame2.values
array([[2000, 'Ohio', 1.5, nan],
       [2001, 'Ohio', 1.7, nan],
       [2002, 'Ohio', 3.6, nan],
       [2001, 'Nevada', 2.4, nan],
       [2002, 'Nevada', 2.9, nan],
       [2003, 'Nevada', 3.2, nan]], dtype=object)
# 3、查看列数据
frame2.year
one      2000
two      2001
three    2002
four     2001
five     2002
six      2003
Name: year, dtype: int64
frame2["year"]
one      2000
two      2001
three    2002
four     2001
five     2002
six      2003
Name: year, dtype: int64
# 4、赋值修改列
# 注意是整列的修改
frame2["debt"] = 18
frame2

year

state

pop

debt

one

2000

Ohio

1.5

18

two

2001

Ohio

1.7

18

three

2002

Ohio

3.6

18

four

2001

Nevada

2.4

18

five

2002

Nevada

2.9

18

six

2003

Nevada

3.2

18

# 传入numpy数据
frame2["debt"] = np.arange(6.0)
frame2

year

state

pop

debt

one

2000

Ohio

1.5

0.0

two

2001

Ohio

1.7

1.0

three

2002

Ohio

3.6

2.0

four

2001

Nevada

2.4

3.0

five

2002

Nevada

2.9

4.0

six

2003

Nevada

3.2

5.0

# 传入S型数据
val = pd.Series([1.2, 1.9, 2], index=["one", "three", "five"])
frame2["debt"] = val
frame2

year

state

pop

debt

one

2000

Ohio

1.5

1.2

two

2001

Ohio

1.7

NaN

three

2002

Ohio

3.6

1.9

four

2001

Nevada

2.4

NaN

five

2002

Nevada

2.9

2.0

six

2003

Nevada

3.2

NaN


DF操作2(重点)

  • 1、 创建不存在的列:只能通过字典标记的形式
  • 2、创建布尔型数据
    • 如何创建一列布尔值(T/F)的数据
    • 如何创建一个新的属性数据
  • 3、删除数据del
  • 4、嵌套字典形式创建DF数据
    • 外层作为列索引
    • 内层作为行索引
  • 5、DF转置T
  • 6、DF中传入S型数据
  • 7、设置DF的columns和index属性的name属性

创建数据

  • 如何创建一列布尔值(T/F)的数据
  • 如何创建一个新的属性数据
# 1、2

# 先判断state属性的值是否为Ohio
# 如果等于,将eastern属性的值设为T,否则为F
# eastern属性是新建的,只能通过字典标记的形式
frame2["eastern"] = (frame2.state == "Ohio")
frame2

year

state

pop

debt

eastern

one

2000

Ohio

1.5

1.2

True

two

2001

Ohio

1.7

NaN

True

three

2002

Ohio

3.6

1.9

True

four

2001

Nevada

2.4

NaN

False

five

2002

Nevada

2.9

2.0

False

six

2003

Nevada

3.2

NaN

False

# 3 删除数据
del frame2["eastern"]
frame2

year

state

pop

debt

one

2000

Ohio

1.5

1.2

two

2001

Ohio

1.7

NaN

three

2002

Ohio

3.6

1.9

four

2001

Nevada

2.4

NaN

five

2002

Nevada

2.9

2.0

six

2003

Nevada

3.2

NaN

frame2["pop"]
one      1.5
two      1.7
three    3.6
four     2.4
five     2.9
six      3.2
Name: pop, dtype: float64
frame2.pop
<bound method NDFrame.pop of        year   state  pop  debt
one    2000    Ohio  1.5   1.2
two    2001    Ohio  1.7   NaN
three  2002    Ohio  3.6   1.9
four   2001  Nevada  2.4   NaN
five   2002  Nevada  2.9   2.0
six    2003  Nevada  3.2   NaN>
# 4  嵌套字典创建DF:外层为列属性,内层为行
pop = {'Nevada': {2001: 2.4, 2002: 2.9},
       'Ohio': {2000: 1.5, 2001: 1.7, 2002: 3.6}}
frame3 = pd.DataFrame(pop)
frame3

Nevada

Ohio

2000

NaN

1.5

2001

2.4

1.7

2002

2.9

3.6

# 5、转置操作
frame3.T

2000

2001

2002

Nevada

NaN

2.4

2.9

Ohio

1.5

1.7

3.6

# 6 、DF中传入S型数据
pdata = {'Ohio': frame3['Ohio'][:-1],
         'Nevada': frame3['Nevada'][:2]}
pd.DataFrame(pdata)

Ohio

Nevada

2000

1.5

NaN

2001

1.7

2.4

# 获取DF中的所有数据
frame2.values
array([[2000, 'Ohio', 1.5, 1.2],
       [2001, 'Ohio', 1.7, nan],
       [2002, 'Ohio', 3.6, 1.9],
       [2001, 'Nevada', 2.4, nan],
       [2002, 'Nevada', 2.9, 2.0],
       [2003, 'Nevada', 3.2, nan]], dtype=object)

Stay Foolish Stay Hungry

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-9-9,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Series创建
  • Series中值的获取
  • 索引操作
    • 索引多样性
      • 索引缺失值处理
        • Series对象的name属性
          • 索引就地修改
          • DataFrame
            • DF创建
            • DF操作1
            • DF操作2(重点)
            • 创建数据
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档