1. Pandas介绍
Pandas是一个基于NumPy开发的工具库,用于数据处理和分析:如合并、分组、筛选和重塑数据等。Pandas的灵活性和高效性使其成为数据科学家、分析师和数据工程师的重要工具之一。
Series和DataFrame是Pandas的两种基本的数据类型,Series是一维的数据类型(可以理解为数组),而DataFrame是二维数据类型(可以理解为矩阵)。
2. Series基本功能介绍
首先先建立一个Series:
import pandas t = pandas.Series([15,2,3,4,5],index=list("abcde")) print(t)
输出的一维数据Series为:
a 15 b 2 c 3 d 4 e 5 dtype: int64
其中a,b,c,d,e为数据索引标签;15,2,3,4,5为数据。
2.1 索引数据
例如索引“c”指向的数据“3”
print(t["c"])
输出为:
c 3 dtype: int64
这个有点类似dict字典型数据
2.2 数据切片
print(t[[1,4]])
输出为:
b 2 e 5 dtype: int64
也可以输出一段数据:
print(t[1:4])
输出为:
b 2 c 3 d 4 dtype: int64
注意:与上面不同,这里只能输出到d 4
2.3 输出大于x的值
print(t[t>2])
输出为:
a 15 c 3 d 4 e 5 dtype: int64
输出小于x的值方法同理。
2.4 输出Series的数据
print(t.values) print(type(t)) print(type(t.values))
输出为:
[15 2 3 4 5] <class 'pandas.core.series.Series'> <class 'numpy.ndarray'>
可见,这里把Series的值输出后,数据类型也变成了NumPy的ndarray。
3. DataFrame基本功能介绍
首先还是建立一个DataFrame作为示例:
import pandas t = pandas.DataFrame([[1,2,3,4,5], [11,12,13,14,15], [21,22,23,24,25]], index=list("ABC"),columns=list("abcde")) print(t)
输出为:
a b c d e A 1 2 3 4 5 B 11 12 13 14 15 C 21 22 23 24 25
可见,DataFrame就是一个有行列标注的数据列表。
3.1 输出行列的索引标签
print(t.index) print(t.columns)
输出为:
Index(['A', 'B', 'C'], dtype='object') Index(['a', 'b', 'c', 'd', 'e'], dtype='object')
3.2 输出DataFrame的数据
print(t.values) print(type(t.values))
输出为:
[[ 1 2 3 4 5] [11 12 13 14 15] [21 22 23 24 25]] <class 'numpy.ndarray'>
同样,数据类型也会被转换为ndarray。
3.3 输出某列的均值 .mean()
print(t["d"].mean())
输出为:
14.0
但是这个不能输出某行的均值。
3.4 输出DataFrame的形状(行列数)
print(t.shape)
输出为:
(3, 5)
3.5 输出数据类型
print(t.dtypes)
输出为:
a int64 b int64 c int64 d int64 e int64 dtype: object
3.6 输出维度数
print(t.ndim)
输出为:
2
说明该DataFrame是一个二维数据表。
3.7 输出相关信息
print(t.info())
输出为:
<class 'pandas.core.frame.DataFrame'> Index: 3 entries, A to C Data columns (total 5 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 a 3 non-null int64 1 b 3 non-null int64 2 c 3 non-null int64 3 d 3 non-null int64 4 e 3 non-null int64 dtypes: int64(5) memory usage: 144.0+ bytes None
输出该DataFrame相关信息。
3.8 输出相关数据统计
print(t.describe())
输出为:
a b c d e count 3.0 3.0 3.0 3.0 3.0 mean 11.0 12.0 13.0 14.0 15.0 std 10.0 10.0 10.0 10.0 10.0 min 1.0 2.0 3.0 4.0 5.0 25% 6.0 7.0 8.0 9.0 10.0 50% 11.0 12.0 13.0 14.0 15.0 75% 16.0 17.0 18.0 19.0 20.0 max 21.0 22.0 23.0 24.0 25.0
输出均值、样本标准差、极值等数据。
3.9 按某列排序
print(t.sort_values(by = "e", ascending= False))
输出为:
a b c d e C 21 22 23 24 25 B 11 12 13 14 15 A 1 2 3 4 5
按e列排序,ascending = False 意味着是降序排序。
3.10 输出某行或某列
输出前B行
print(t[1:2])
输出为:
a b c d e B 11 12 13 14 15
输出b列
print(t["b"])
输出为:
A 2 B 12 C 22 Name: b, dtype: int64
3.11 输出数据类型
print(type(t["b"]))
输出为:
<class 'pandas.core.series.Series'>
说明b列数据类型为Series。
3.12 切片(重点)
用loc可以进行各种切片(块)。这里注意loc后面是[]
某行的切片
print(t.loc["B", :])
输出为:
a 11 b 12 c 13 d 14 e 15 Name: B, dtype: int64
注意和上面3.10的区别
切块
print(t.loc[["A","B"],["a","b","c"]])
输出为:
a b c A 1 2 3 B 11 12 13
还可以用iloc切片,直接用数字索引:
print(t.iloc[1:3,[2,1]])
输出为:
c b B 13 12 C 23 22
带条件切片(与条件):
print(t[(t["c"]>5)&(t["d"]<20)])
输出为:
a b c d e B 11 12 13 14 15
带条件切片(或条件):
print(t[(t["a"]>10)|(t["d"]>15)])
输出为:
a b c d e B 11 12 13 14 15 C 21 22 23 24 25
3.13 筛选大于x的值
print(t[t>10])
输出为:
a b c d e A NaN NaN NaN NaN NaN B 11.0 12.0 13.0 14.0 15.0 C 21.0 22.0 23.0 24.0 25.0
不满足条件的值会被设定为NaN,这些NaN可以被删除:
a = t[t>10] print(a.dropna(how="all"))
输出为:
a b c d e B 11.0 12.0 13.0 14.0 15.0 C 21.0 22.0 23.0 24.0 25.0
或者用别的值替换NaN:
a = t[t>10] print(a.fillna(1111))
输出为:
a b c d e A 1111.0 1111.0 1111.0 1111.0 1111.0 B 11.0 12.0 13.0 14.0 15.0 C 21.0 22.0 23.0 24.0 25.0
以上,Pandas中的Series和DataFrame的基本操作介绍完毕。