Fork me on GitHub

pandasNote1

1
2
3
import numpy as np
import pandas as pd
from pandas import Series, DataFrame

Series创建

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

Series中值的获取

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

索引操作

索引多样性

  • 自建索引
  • 默认的数值索引
  • 通过Python的字典形式来创建索引
1
2
# 上面的obj1
obj1
1
2
3
4
5
a    1
b 2
c 3
d 4
dtype: int64
1
obj1['b']
1
2
1
2
# 通过切片形式,包含末端,和Python1不同
obj1["a":"c"]
1
2
3
4
a    1
b 2
c 3
dtype: int64
1
obj1[["b", "a", "d"]]
1
2
3
4
b    2
a 1
d 4
dtype: int64
1
obj1[1]
1
2
1
obj1[1:4]
1
2
3
4
b    2
c 3
d 4
dtype: int64
1
obj1[[1, 3]]
1
2
3
b    2
d 4
dtype: int64
1
obj1[obj1 > 2]
1
2
3
c    3
d 4
dtype: int64

索引缺失值处理

  • 缺失值用NaN表示
  • isnullnotnull检测缺失值
1
2
# 上面的obj2
obj2
1
2
3
4
city      shenzhen
age 25
number 123456
dtype: object
1
2
3
4
# sex对应的值找不到,用NaN表示
data2 = ["sex", "city", "age", "number"]
obj3 = pd.Series(obj2, index=data2)
obj3
1
2
3
4
5
sex            NaN
city shenzhen
age 25
number 123456
dtype: object
1
pd.isnull(obj3)
1
2
3
4
5
sex        True
city False
age False
number False
dtype: bool
1
2
# Series的实例方法isnull和notnull
obj3.isnull()
1
2
3
4
5
sex        True
city False
age False
number False
dtype: bool

Series对象的name属性

  • S数据本身和索引都有name属性
  • 能够直接指定name属性的值
1
2
3
4
5
# S的name属性
obj3.name = "person"
# S索引的name属性
obj3.index.name = "information"
obj3
1
2
3
4
5
6
information
sex NaN
city shenzhen
age 25
number 123456
Name: person, dtype: object

索引就地修改

1
2
3
# 上面栗子中的number修改为phone_num
obj3.index = ["sex", "city", "age", "phone_num"]
obj3
1
2
3
4
5
sex               NaN
city shenzhen
age 25
phone_num 123456
Name: person, dtype: object

DataFrame

  • 表格型数据结构,含有一组有序的列
  • 既有行索引也有列索引

DF创建

  • 使用pd.DataFrame(data)
  • 直接传入字典型数据
  • 通过columns参数指定各个属性的顺序
1
2
3
4
5
6
# 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
1
2
3
# 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
1
2
3
4
5
# 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
2
3
# 1、获取DF中的列属性和索引
print(frame2.columns)
print(frame2.index)
1
2
Index(['year', 'state', 'pop', 'debt'], dtype='object')
Index(['one', 'two', 'three', 'four', 'five', 'six'], dtype='object')
1
2
# 2、查看values
frame2.values
1
2
3
4
5
6
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)
1
2
# 3、查看列数据
frame2.year
1
2
3
4
5
6
7
one      2000
two 2001
three 2002
four 2001
five 2002
six 2003
Name: year, dtype: int64
1
frame2["year"]
1
2
3
4
5
6
7
one      2000
two 2001
three 2002
four 2001
five 2002
six 2003
Name: year, dtype: int64
1
2
3
4
# 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
1
2
3
# 传入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
1
2
3
4
# 传入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
3
4
5
6
7
# 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
1
2
# 3 删除数据
del frame2["eastern"]
1
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
1
frame2["pop"]
1
2
3
4
5
6
7
one      1.5
two 1.7
three 3.6
four 2.4
five 2.9
six 3.2
Name: pop, dtype: float64
1
frame2.pop
1
2
3
4
5
6
7
<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>
1
2
3
4
5
# 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
1
2
# 5、转置操作
frame3.T
2000 2001 2002
Nevada NaN 2.4 2.9
Ohio 1.5 1.7 3.6
1
2
3
4
# 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
1
2
# 获取DF中的所有数据
frame2.values
1
2
3
4
5
6
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

本文标题:pandasNote1

发布时间:2019年09月09日 - 18:09

原始链接:http://www.renpeter.cn/2019/09/09/pandasNote1.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

Coffee or Tea