文章目录
Pandas 基本功能
主要介绍
Series
和DataFrame
对象,在实时数据处理中非常重要。
1、Series 基本属性
属性或方法 | 描述 |
---|---|
axes | 返回行轴标签列表 |
dtype | 返回对象的数据类型(dtype) |
empty | 如果系列为空,返回 True |
ndim | 返回底层数据的维数。默认:1 |
size | 返回基础数据中的元素数。 |
values | 将系列作为 ndarray 返回。 |
head() | 返回前 n 行。 |
tail() | 返回后 n 行。 |
axes 示例
返回Series的标签列表
import pandas as pd
import numpy as np
s = pd.Series(np.random.randn(5))
print(s.axes)
[RangeIndex(start=0, stop=5, step=1)]
empty 示例
返回布尔值,表示对象是否为空
返回 True 表示对象为空
import pandas as pd
import numpy as np
s = pd.Series(np.random.randn(5))
print(s.empty)
False
ndim 示例
返回对象的维数
import pandas as pd
import numpy as np
s = pd.Series(np.random.randn(5))
n = pd.DataFrame(np.random.randn(6).reshape((2,3)))
print(s.ndim)
print(n.ndim)
1
2
size 示例
返回系列的大小(长度)
import pandas as pd
import numpy as np
s = pd.Series(np.random.randn(5))
print(s.size)
5
values 示例
以列表形式返回系列中的实际数据值
import pandas as pd
import numpy as np
s = pd.Series(np.random.randn(5))
print(s.values)
[ 0.90074849 -0.01737094 -0.61616918 -0.05302233 -0.02019216]
head() 和 tail() 方法示例
head() 返回前
n
行。
默认:显示前5
行,可以自定义这个数字。
tail() 返回前
n
行。
默认:显示后5
行,可以自定义这个数字。
2、DataFrame 基本属性
属性或方法 | 描述 |
---|---|
T | 转置行和列 |
axes | 返回一个列,行轴标签和列轴标签作为唯一的成员。 |
dtypes | 返回对象中的数据类型 |
empty | 如果为空返回 True |
ndim | 返回轴/数组维度大小 |
shape | 返回 DataFrame 的维度元组 |
size | 返回元素数目 |
values | 返回 Numpy 表示 |
head() | 返回开头 n 行 |
tail() | 返回最后 n 行 |
T(转置)示例
将行和列进行交换位置
import pandas as pd
import numpy as np
data = {'Name':pd.Series(['Hubo','Xiaoli','Vim','KaKa']),
'Age':pd.Series([21,22,23,10]),
'Grade':pd.Series([4.5,4.1,3.3,2.0])}
df = pd.DataFrame(data)
print(df)
print(df.T)
Name Age Grade
0 Hubo 21 4.5
1 Xiaoli 22 4.1
2 Vim 23 3.3
3 KaKa 10 2.0
0 1 2 3
Name Hubo Xiaoli Vim KaKa
Age 21 22 23 10
Grade 4.5 4.1 3.3 2
axes 示例
返回行轴标签和列标签列表
import pandas as pd
import numpy as np
data = {'Name':pd.Series(['Hubo','Xiaoli','Vim','KaKa']),
'Age':pd.Series([21,22,23,10]),
'Grade':pd.Series([4.5,4.1,3.3,2.0])}
df = pd.DataFrame(data)
print(df.axes)
[RangeIndex(start=0, stop=4, step=1), Index(['Name', 'Age', 'Grade'], dtype='object')]
dtype 示例
返回每列的数据类型
import pandas as pd
import numpy as np
data = {'Name':pd.Series(['Hubo','Xiaoli','Vim','KaKa']),
'Age':pd.Series([21,22,23,10]),
'Grade':pd.Series([4.5,4.1,3.3,2.0])}
df = pd.DataFrame(data)
print(df.dtypes)
Name object
Age int64
Grade float64
dtype: object
empty 示例
返回布尔值,对象为空返回
True
import pandas as pd
import numpy as np
data = {'Name':pd.Series(['Hubo','Xiaoli','Vim','KaKa']),
'Age':pd.Series([21,22,23,10]),
'Grade':pd.Series([4.5,4.1,3.3,2.0])}
df = pd.DataFrame(data)
print(df.empty)
False
ndim 示例
返回对象的维数,DataFrame是一个
2D
对象
import pandas as pd
import numpy as np
data = {'Name':pd.Series(['Hubo','Xiaoli','Vim','KaKa']),
'Age':pd.Series([21,22,23,10]),
'Grade':pd.Series([4.5,4.1,3.3,2.0])}
df = pd.DataFrame(data)
print(df.ndim)
2
shape 示例
返回表示
DataFrame
的维度元组
元组(a,b),其中a
是行数,b
表示列数
import pandas as pd
import numpy as np
data = {'Name':pd.Series(['Hubo','Xiaoli','Vim','KaKa']),
'Age':pd.Series([21,22,23,10]),
'Grade':pd.Series([4.5,4.1,3.3,2.0])}
df = pd.DataFrame(data)
print(df.shape)
(4,3)
size 示例
返回
DataFrame
中元素数
import pandas as pd
import numpy as np
data = {'Name':pd.Series(['Hubo','Xiaoli','Vim','KaKa']),
'Age':pd.Series([21,22,23,10]),
'Grade':pd.Series([4.5,4.1,3.3,2.0])}
df = pd.DataFrame(data)
print(df.size)
12
values 示例
将
DataFrame
中的实际数据作为ndarray
返回。
import pandas as pd
import numpy as np
data = {'Name':pd.Series(['Hubo','Xiaoli','Vim','KaKa']),
'Age':pd.Series([21,22,23,10]),
'Grade':pd.Series([4.5,4.1,3.3,2.0])}
df = pd.DataFrame(data)
print(df.values)
[['Hubo' 21 4.5]
['Xiaoli' 22 4.1]
['Vim' 23 3.3]
['KaKa' 10 2.0]]
head() 和 tail() 方法示例
head() 返回前
n
行。
默认:显示前5
行,可以自定义这个数字。
tail() 返回前
n
行。
默认:显示后5
行,可以自定义这个数字。
3、DataFrame 描述统计
Pandas 中描述统计信息的函数
函数 | 描述 |
---|---|
count() |
非空观测数量 |
sum() |
所有值之和 |
mean() |
所有值的平均值 |
median() |
所有值的中位数 |
mode() |
值的模值 |
std() |
值的标准偏差 |
min() |
所有值中的最小值 |
max() |
所有值中的最大值 |
abs() |
绝对值 |
prod() |
数组元素的乘积 |
cumsum() |
累计总和 |
cumprod() |
累计乘积 |
describe() |
统计上面所有信息 |
- 注意:
sum()
,cumsum()
函数能数字和字符一起工作。 - 注意:
abs()
这样的函数就只能操作数字。
describe()示例
函数给出平均值、标准差等
默认:函数排除字符列,只列出数字列摘要
include()
:用于传递什么列,默认:数字值
object
- 汇总字符串列number
- 汇总数字列all
- 将所有列汇总在一起(不要传递列表)
import pandas as pd
import numpy as np
data = {'Name':pd.Series(['Hubo','Xiaoli','Vim','KaKa']),
'Age':pd.Series([21,22,23,10]),
'Grade':pd.Series([4.5,4.1,3.3,2.0])}
df = pd.DataFrame(data)
print(df.describe(include=['object']))
print(df.describe(include='all'))
Name
count 4
unique 4
top Hubo
freq 1
Name Age Grade
count 4 4.000000 4.000000
unique 4 NaN NaN
top Hubo NaN NaN
freq 1 NaN NaN
mean NaN 19.000000 3.475000
std NaN 6.055301 1.102648
min NaN 10.000000 2.000000
25% NaN 18.250000 2.975000
50% NaN 21.500000 3.700000
75% NaN 22.250000 4.200000
max NaN 23.000000 4.500000
4、Pandas函数应用
将函数应用于
Pandas
对象,常用三种方法,行或列或元素上进行操作。
pipe()
:表格函数应用apply()
:行或列函数应用applymap()
:元素函数应用
表格函数应用
将函数和适当数量的参数作为管道参数来执行自定义操作。
对整个DataFrame执行操作。
import pandas as pd
import numpy as np
def adder(ele1,ele2):
return ele1+ele2
df = pd.DataFrame(np.random.rand(5,3),columns=['A','B','C'])
print(df.pipe(adder,100))
A B C
0 100.881561 100.254161 100.390598
1 100.834995 100.787453 100.237498
2 100.191932 100.169226 100.185465
3 100.600637 100.055993 100.343523
4 100.877651 100.473381 100.438437
行或列函数应用
使用
apply
()方法沿DataFrame
或Panel
的轴应用任意函数
默认:操作按列执行,将每列列为数组
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(5,3),columns=['A','B','C'])
print(df)
print(df.apply(np.mean))
print(df.apply(np.mean, axis=1))
df.apply(lambda x: x.max() - x.min())
print(df)
A B C
0 0.437312 0.799019 0.842078
1 0.697479 0.117254 0.628487
2 0.816568 0.972410 0.760768
3 0.450923 0.031967 0.658762
4 0.641998 0.633653 0.748719
A 0.608856
B 0.510861
C 0.727763
dtype: float64
0 0.692803
1 0.481074
2 0.849916
3 0.380551
4 0.674790
dtype: float64
A B C
0 0.437312 0.799019 0.842078
1 0.697479 0.117254 0.628487
2 0.816568 0.972410 0.760768
3 0.450923 0.031967 0.658762
4 0.641998 0.633653 0.748719
元素函数应用
在DataFrame上的方法applymap()和类似地在Series上的map()接受任何Python函数,并且返回单个值。
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(5,3),columns=['A','B','C'])
print(df)
print(df['A'].map(lambda x: x * 100))
print(df.applymap(lambda x: x * 100))
A B C
0 0.191182 0.468353 0.569726
1 0.643632 0.903344 0.689815
2 0.226939 0.455236 0.054880
3 0.024711 0.063028 0.601296
4 0.502506 0.259828 0.903867
0 19.118187
1 64.363249
2 22.693934
3 2.471056
4 50.250610
Name: A, dtype: float64
A B C
0 19.118187 46.835287 56.972615
1 64.363249 90.334413 68.981530
2 22.693934 45.523638 5.487973
3 2.471056 6.302777 60.129613
4 50.250610 25.982770 90.386709
**注意:**该操作和表格函数应用的实例作用类似。
5、Pandas 重建索引
重建索引会更改
DataFrame
的行标签和列标签
重新索引意味着符合数据以匹配特定轴上的一组给定的标签。
实现的操作
- 重新排序现有数据以匹配一组新的标签
- 在没有标签数据的标签位置插入缺失值
NA
标记
示例
import pandas as pd
import numpy as np
N = 10
df = pd.DataFrame({
'A': pd.date_range('2016-11-11',periods=N),
'C': np.linspace(0,num=N,stop=N-1),
'X': np.random.rand(N),
'W': np.random.choice(['Low','Mid','High'],N).tolist(),
'D': np.random.normal(100,10,size=(N)).tolist(),
})
df1 = df.reindex(index=[0,3,8], columns=['A','W','B'])
print(df)
print(df1)
A C X W D
0 2016-11-11 0.0 0.362752 Low 88.484337
1 2016-11-12 1.0 0.370616 Low 105.494904
2 2016-11-13 2.0 0.230432 High 129.169419
3 2016-11-14 3.0 0.054996 High 104.978711
4 2016-11-15 4.0 0.374281 High 98.874150
5 2016-11-16 5.0 0.855535 Mid 101.220366
6 2016-11-17 6.0 0.578576 Mid 91.053585
7 2016-11-18 7.0 0.243621 Low 97.590969
8 2016-11-19 8.0 0.014339 Mid 124.042128
9 2016-11-20 9.0 0.238797 Mid 107.222124
A W B
0 2016-11-11 Low NaN
3 2016-11-14 High NaN
8 2016-11-19 Mid NaN
重建索引与其他对象对齐
采取一个对象和重新索引,其轴被标记为与另一个对象相同。
import pandas as pd
import numpy as np
df1 = pd.DataFrame(np.random.rand(5,3), columns=['A','B','C'])
df2 = pd.DataFrame(np.random.rand(2,3), columns=['A','B','C'])
df1 = df1.reindex_like(df2)
print(df1)
A B C
0 0.625741 0.372294 0.146664
1 0.831084 0.350805 0.277556
重命名
rename()
方法允许基于一些映射(字典或者系列)或任意函数来重新标记一个轴。
import pandas as pd
import numpy as np
df1 = pd.DataFrame(np.random.rand(5,3), columns=['A','B','C'])
print(df1)
print(df1.rename(columns={'A':'a','B':'b'}))
A B C
0 0.296367 0.849991 0.551506
1 0.750420 0.627995 0.501638
2 0.651334 0.538189 0.179588
3 0.320770 0.528002 0.263931
4 0.695984 0.025996 0.585251
a b C
0 0.296367 0.849991 0.551506
1 0.750420 0.627995 0.501638
2 0.651334 0.538189 0.179588
3 0.320770 0.528002 0.263931
4 0.695984 0.025996 0.585251