pandas和numpy对比
import numpy as np
import pandas as pd
a=np.array([[1,2],[3,4]])
b=pd.DataFrame({
"a":[1,2],
"b":[3,4]
})
print(a)
print(b)
[[1 2]
[3 4]]
a b
0 1 3
1 2 4
pandas有标签(Column 名)和索引(Row index)
如果需要处理表格型数据、进行数据清洗和转换,通常会首选Pandas。
如果需要进行数值计算、线性代数运算或高性能的科学计算,NumPy可能更适合。
基本操作
从文件读取数据
excel文件
a=pd.read_excel("体检数据.xlsx")
b=pd.read_excel("体检数据.xlsx",index_col=0)
print(a)
print(b)
学号 姓名 身高 体重 肺活量
0 1 小明 168 60 3200
1 2 小黄 187 80 3800
2 3 小花 170 70 3400
姓名 身高 体重 肺活量
学号
1 小明 168 60 3200
2 小黄 187 80 3800
3 小花 170 70 3400
csv或txt等纯文本文件
a=pd.read_csv("体检数据.csv",index_col=0,sep=",")
print(a)
姓名 身高 体重 肺活量
学号
1 小明 168 60 3200
2 小黄 187 80 3800
3 小花 170 70 3400
Pandas 中的数据是什么
数据序列Series(一维)
a=[1,2,3]
a=pd.Series(a,index=["a","b","c"])
print(a)
b=a.to_numpy()
print(type(b))
a 1
b 2
c 3
dtype: int64
<class 'numpy.ndarray'>
数据表DataFrame(二维)
a=pd.DataFrame( {"第一列":[1,2],"第二列":[3,4]} ,index=["第一行","第二行"])
print(a)
print(a.index)
print(a.columns)
print(a["第一列"])
# 想获取每行后面用loc或者iloc实现,敬请期待
第一列 第二列
第一行 1 3
第二行 2 4
Index(['第一行', '第二行'], dtype='object')
Index(['第一列', '第二列'], dtype='object')
第一行 1
第二行 2
Name: 第一列, dtype: int64
选取数据
a=np.arange(-12,12).reshape(6,4)
b=pd.DataFrame(a,index=list("abcdef"),columns=list("ABCD"))
print(b)
A B C D
a -12 -11 -10 -9
b -8 -7 -6 -5
c -4 -3 -2 -1
d 0 1 2 3
e 4 5 6 7
f 8 9 10 11
选Column
c=b["A"]
print(c)
c=b[["A","B"]]
print(c)
a -12
b -8
c -4
d 0
e 4
f 8
Name: A, dtype: int32
A B
a -12 -11
b -8 -7
c -4 -3
d 0 1
e 4 5
f 8 9
loc(通过自定义的序号索引)
c=b.loc["a"]
print(c)
c=b.loc[["a","b"]]
print(c)
A -12
B -11
C -10
D -9
Name: a, dtype: int32
A B C D
a -12 -11 -10 -9
b -8 -7 -6 -5
iloc(通过默认的序号索引)
c=b.iloc[0]
print(c)
c=b.iloc[[0,1]]
print(c)
A -12
B -11
C -10
D -9
Name: a, dtype: int32
A B C D
a -12 -11 -10 -9
b -8 -7 -6 -5
loc和iloc如何任意选取行列
c=b.loc[["a","b"],"B":"C"]
print(c)
c=b.iloc[[0,1],1:3]
print(c)
B C
a -11 -10
b -7 -6
B C
a -11 -10
b -7 -6
loc和iloc混搭
# iloc->loc
print(b.index)
print(b.columns)
print(b.index[0:2])
print(b.columns[0:2])
#loc->iloc
print(b.index.get_indexer(['a','b']))
print(b.columns.get_indexer(['A','B']))
Index(['a', 'b', 'c', 'd', 'e', 'f'], dtype='object')
Index(['A', 'B', 'C', 'D'], dtype='object')
Index(['a', 'b'], dtype='object')
Index(['A', 'B'], dtype='object')
[0 1]
[0 1]
条件过滤筛选
#选在 A Column 中小于 0 的那些数据
c=b["A"]<0
print(c)
print(b[c])
# 用loc选在第一行数据不小于 -10 的数据
c=b.loc["a"]>=-10
print(c)
print(b.loc[["a"],c])
a True
b True
c True
d False
e False
f False
Name: A, dtype: bool
A B C D
a -12 -11 -10 -9
b -8 -7 -6 -5
c -4 -3 -2 -1
A False
B False
C True
D True
Name: a, dtype: bool
C D
a -10 -9
统计展示
基础统计方法
快速总结
a=np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
a=pd.DataFrame(a,index=["r1","r2","r3","r4"],columns=["c1","c2","c3"])
print(a)
a.describe()
c1 c2 c3
r1 1 2 3
r2 4 5 6
r3 7 8 9
r4 10 11 12
c1 c2 c3
count 4.000000 4.000000 4.000000
mean 5.500000 6.500000 7.500000
std 3.872983 3.872983 3.872983
min 1.000000 2.000000 3.000000
25% 3.250000 4.250000 5.250000
50% 5.500000 6.500000 7.500000
75% 7.750000 8.750000 9.750000
max 10.000000 11.000000 12.000000
处理空值
a=pd.DataFrame([
[1,None,None,4],
[5,6,7,None],
[9,10,11,12],
], columns=list("abcd")
)
print(a)
a b c d
0 1 NaN NaN 4.0
1 5 6.0 7.0 NaN
2 9 10.0 11.0 12.0
print(a.isnull())
a b c d
0 False True True False
1 False False False True
2 False False False False
print(a.dropna())
a b c d
2 9 10.0 11.0 12.0
print(a.fillna(0))
a b c d
0 1 0.0 0.0 4.0
1 5 6.0 7.0 0.0
2 9 10.0 11.0 12.0
数据处理
数据管理
融合数据
融合Merge
left=pd.DataFrame({
"key":['k0','k1','k2','k3'],
"a":['a0','a1','a2','a3'],
"b":['b0','b1','b2','b3']
})
print(left)
right=pd.DataFrame({
"key":['k0','k1','k2','k3'],
"c":["c0","c1","c2","c3"],
"d":["d0","d1","d2","d3"]
})
print(right)
key a b
0 k0 a0 b0
1 k1 a1 b1
2 k2 a2 b2
3 k3 a3 b3
key c d
0 k0 c0 d0
1 k1 c1 d1
2 k2 c2 d2
3 k3 c3 d3
print(pd.merge(left,right,on="key"))
key a b c d
0 k0 a0 b0 c0 d0
1 k1 a1 b1 c1 d1
2 k2 a2 b2 c2 d2
3 k3 a3 b3 c3 d3
数据分组