【自学】利用python进行数据分析 LESSON5 <pandas入门——pandas数据结构介绍1>

本文介绍了Pandas的两个核心数据结构——Series和DataFrame。Series是一维数组,包含数值和对应的标签(索引),可以按标签进行索引和选择数据。DataFrame是二维表格数据,包含列集合,每列可以是不同类型的值,同时具备行和列索引。文章通过实例展示了如何创建、操作和索引这两个数据结构,以及如何处理缺失数据。
摘要由CSDN通过智能技术生成

目录

前言

一、pandas数据结构介绍

1. Series

2. DataFrame

总结


前言

pandas经常和其他数值计算工具一起使用,如numpy ,SciPy,matplotlib等。pandas与numpy最大的不同在于pandas是用来处理表格型或异质型数据的,而numpy是用来处理同质型的数值类数组数据。


一、pandas数据结构介绍

首先了解两个常用的工具数据结构:Series 和 DataFrame。

1. Series

series是一种一维的数组型对象,它包含了一个值序列(与 numpy 中的类型相似),并且包含了数据标签,称为索引。

示例:

import pandas as pd

obj = pd.Series([4, 7, -5, 3])
print(obj)

结果:

0    4
1    7
2   -5
3    3
dtype: int64

由于没有指定索引,因此默认索引从0到 n-1。可以通过values属性和index属性分别获取值和索引。

示例:

import pandas as pd

obj = pd.Series([4, 7, -5, 3])
print(obj)
print(obj.values)
print(obj.index)

结果:

0    4
1    7
2   -5
3    3
dtype: int64
[ 4  7 -5  3]
RangeIndex(start=0, stop=4, step=1)

通常需要创建一个索引序列,用标签标识每个数据点

示例

import pandas as pd
import numpy as np

obj = pd.Series([4, 7, -5, 3], index = ['a', 'b', 'c', 'd'])
print(obj)

#搞个花活,学生成绩单
data = np.random.randint(70, 100, size = 10)
name = ['abc', 'bcd', 'cde', 'def', 'efg', 'fgh', 'ghi', 'hij', 'ijk', 'jkl']
exam = pd.Series(data, index = name)
print(exam)

结果:

a    4
b    7
c   -5
d    3
dtype: int64
abc    90
bcd    77
cde    91
def    85
efg    83
fgh    96
ghi    90
hij    70
ijk    87
jkl    93
dtype: int32

与numpy相比,可以在从数据中选择数据时使用标签来进行索引。

示例:

import pandas as pd
import numpy as np

obj = pd.Series([4, 7, -5, 3], index = ['a', 'b', 'c', 'd'])
print(obj)

#索引部分
print('obj["a"]is : ')
print(obj['a'])
print('a, c, d is : ')
print(obj[['a', 'c', 'd']])#注意此处一定要有两个方括号
obj['b'] = 10000
print(obj)

结果:

a    4
b    7
c   -5
d    3
dtype: int64
obj["a"]is : 
4
a, c, d is : 
a    4
c   -5
d    3
dtype: int64
a        4
b    10000
c       -5
d        3

注意:

 ['a', 'c', 'd']作为索引列表,包含的不是数字,而是字符串。因此该行代码一定要有两个方括号。

当使用numpy函数及其操作时,仍会保存索引值。

示例:

import pandas as pd
import numpy as np

obj = pd.Series([4, 7, -5, 3], index = ['a', 'b', 'c', 'd'])

#布尔值
a = obj[obj > 0]
print('a is :')
print(a)

#加减乘除
b = obj * 2
print('b is :')
print(b)

c = np.exp(obj)
print('c is :')
print(c)

d = np.sin(obj)
print('d is :')
print(d)

结果:

a is :
a    4
b    7
d    3
dtype: int64
b is :
a     8
b    14
c   -10
d     6
dtype: int64
c is :
a      54.598150
b    1096.633158
c       0.006738
d      20.085537
dtype: float64
d is :
a   -0.756802
b    0.656987
c    0.958924
d    0.141120
dtype: float64

从另一个角度考虑,他是一个长度固定且有序的字典,他将索引值和数据值按照位置配对。因此,可以利用已有的字典生成一个Series。

示例:

import pandas as pd
import numpy as np

data = {'ohio': 35000, 'texas': 71000, 'oregon': 16000}
obj = pd.Series(data)
print(obj)

结果:

ohio      35000
texas     71000
oregon    16000
dtype: int64

当我们把字典传递给Series构造函数时,产生的Series的索引将是排序好的字典键。

示例:

import pandas as pd
import numpy as np

data = {'ohio': 35000, 'texas': 71000, 'oregon': 16000}
state = ['California', 'Mexico', 'oregon']
obj = pd.Series(data, index = state)
print(obj)

结果:

California        NaN
Mexico            NaN
oregon        16000.0
dtype: float64

重点关注结果:

由于在 state 中,前两个没有出现在data键中,因此他们的对应值为NaN,第三个出现了,有正确的对应值。

进一步分析,pandas 中使用 insull 和 notnull 函数来检查缺失数据

示例:

import pandas as pd
import numpy as np

data = {'ohio': 35000, 'texas': 71000, 'oregon': 16000}
state = ['California', 'Mexico', 'oregon']
obj = pd.Series(data, index = state)
print(obj)
print()
print(pd.isnull(obj))
print()
print(pd.notnull(obj))

结果:

California        NaN
Mexico            NaN
oregon        16000.0
dtype: float64

California     True
Mexico         True
oregon        False
dtype: bool

California    False
Mexico        False
oregon         True
dtype: bool

Series 对象自身和其索引都有name属性。

示例:

import pandas as pd

data = {'ohio': 35000, 'texas': 71000, 'oregon': 16000}
obj = pd.Series(data)
obj.name = 'population'
obj.index.name = 'state'
print(obj)

结果:

state
ohio      35000
texas     71000
oregon    16000
Name: population, dtype: int64

分析:简单地说,就是给索引和整个部分进行命名。

Series 可以通过按位置赋值的方式进行改变。

示例:

import pandas as pd

data = {'ohio': 35000, 'texas': 71000, 'oregon': 16000}
state = ['Astrilia', 'Mexico', 'China']
obj = pd.Series(data)
obj.name = 'population'
obj.index.name = 'state'
print(obj)
print()
obj.index = state
print(obj)

结果:

state
ohio      35000
texas     71000
oregon    16000
Name: population, dtype: int64

Astrilia    35000
Mexico      71000
China       16000
Name: population, dtype: int64

2. DataFrame

DataFrame 表示的是矩阵的数据表,包含已排序的列集合,每一列可以是不同的值类型(数值、字符串、布尔值等)。DataFrame既有行索引也有列索引,它的数据被存储为一个以上的二位快,而不是列表、字典或一维数组的集合。

常用构建DataFrame的方式是利用包含等长度列表或numpy 数组的字典来形成。

示例:

import pandas as pd

data = {'state': ['Astrilia', 'Mexico', 'China'],
        'years': [2000, 2001, 2002],
        'pop': [1.5, 3.6, 2.4]}
frame = pd.DataFrame(data)
print(frame)

结果:

      state  years  pop
0  Astrilia   2000  1.5
1    Mexico   2001  3.6
2     China   2002  2.4

当没有指定每一列在哪里时,是随机的,也可以指定:

示例:

import pandas as pd

data = {'state': ['Astrilia', 'Mexico', 'China'],
        'years': [2000, 2001, 2002],
        'pop': [1.5, 3.6, 2.4]}
frame = pd.DataFrame(data, columns = ['years', 'state', 'pop'])
print(frame)

结果:

   years     state  pop
0   2000  Astrilia  1.5
1   2001    Mexico  3.6
2   2002     China  2.4

DataFrame 中的一列,可以按字典型标记那样检索为Series

示例:

import pandas as pd

data = {'state': ['Astrilia', 'Mexico', 'China'],
        'years': [2000, 2001, 2002],
        'pop': [1.5, 3.6, 2.4]}
frame = pd.DataFrame(data, columns = ['years', 'state', 'pop'])
print(frame['state'])
print(frame.years)

结果:

0    Astrilia
1      Mexico
2       China
Name: state, dtype: object
0    2000
1    2001
2    2002
Name: years, dtype: int64


总结

今天主要学习了pandas的数据结构,包括 Series 和 DataFrame。DataFrame没有学完,明天继续。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rachel MuZy

你的鼓励是我的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值