Python (十三) pandas
2023-12-21 21:32:39
程序员的公众号:源1024,获取更多资料,无加密无套路!
最近整理了一份大厂面试资料《史上最全大厂面试题》,Springboot、微服务、算法、数据结构、Zookeeper、Mybatis、Dubbo、linux、Kafka、Elasticsearch、数据库等等
获取方式: 关注公众号并回复 666 领取,更多内容持续奉上
目录
Pandas 库的两种重要数据类型:
????????Series 类型(对应一维)
????????DataFrame 类型(对应二维)
Series
创建不指定索引
默认的位置索引从 0 开始
s = pd.Series(range(5))
print(s)
#输出
0 0
1 1
2 2
3 3
4 4
dtype: int64
自定义索引
s = pd.Series([1, 2, 3, 4], ['a', 'b', 'c', 'd'])
print(s)
#输出
a 1
b 2
c 3
d 4
dtype: int64
使用
#索引
print('index:',s.index)
#值
print('values:',s.values)
#指定索引值
print('索引b的值:',s['b'])
# 连续取值
print(s[1:3])
print(s['b':'c'])
# 不连续取值
print(s[[1,3]])
print(s[['b','c']])
#输出
index: Index(['a', 'b', 'c', 'd'], dtype='object')
values: [1 2 3 4]
索引b的值: 2
b 2
c 3
dtype: int64
b 2
c 3
dtype: int64
b 2
c 3
dtype: int64
DataFrame
DataFrame 是一种二维数据结构,DataFrame 由按一定顺序排列的多列数据组成,DataFrame 既有行索引,也有列索引。
创建
from pandas import DataFrame
df = pd.DataFrame(np.arange(10).reshape(3, 4))
print(df)
# Series对象创建
dt = {
'col1': pd.Series([1, 2, 3], ['a', 'b', 'c']),
'col2': pd.Series([1, 2, 3, 4], ['a', 'b', 'c', 'd']),
}
df = pd.DataFrame(dt)
print(df)
# 字典列表创建
lst = [{'col':1}, {'col':2}, {'col':3}]
df = pd.DataFrame(lst)
print(df)
# 指定行列
df = DataFrame([['小班','10'],['中班','15'],['大班','20']],columns=['name','num'])
print(df)
#输出
0 1 2 3
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11
col1 col2
a 1.0 1
b 2.0 2
c 3.0 3
d NaN 4
col
0 1
1 2
2 3
name num
0 小班 10
1 中班 15
2 大班 20
从文件中读取DataFrame对象
print(pd.read_csv('test.csv'))
# 读取.txt文件
print(pd.read_table('test.txt'))
# 读取.xls/.xlsx等excel文件
print(pd.read_excel('output.xlsx'))
#输出
col1 col2 col3 col4
0 1 2 3 4
1 11 22 33 44
2 111 222 333 444
3 1111 2222 3333 4444
1231qweqwrqweqwrqw123123qweqwe
0 13212312312312312312312312321
1 wwwwwwwwwwwwwwwwwwwww
2 eeeeeeeeeeeeeeeeeeee
列1 列2 列3
0 sys_user_sex 用户性别 0
1 sys_show_hide 菜单状态 0
2 sys_normal_disable 系统开关 0
3 sys_job_status 任务状态 0
4 sys_job_group 任务分组 0
5 sys_yes_no 系统是否 0
6 sys_notice_type 通知类型 0
7 sys_notice_status 通知状态 0
8 sys_oper_type 操作类型 0
9 sys_common_status 系统状态 0
切片
使用中括号,索引表示的是列索引,而切片表示的是行切片。
df = DataFrame(data = np.random.randint(1,50,size=(3,4)),columns=list('abcd'),index=list('ABC'))
print(df)
#输出
a b c d
A 4 26 16 27
B 19 23 49 5
C 14 26 4 11
使用中括号?
print(df['a'])
print(df['A':'B'])
#输出
A 4
B 19
C 14
Name: a, dtype: int32
a b c d
A 4 26 16 27
B 19 23 49 5
loc、iloc
列切片
#列切片
#显示索引
print(df.loc[:,'a':'b'])
#隐式索引,左闭右开
print(df.iloc[:,0:2])
#输出
a b
A 4 26
B 19 23
C 14 26
a b
A 4 26
B 19 23
C 14 26
行切片
#行切片
print(df.loc['A':'B'])
print(df.iloc[0:2])
#输出
a b c d
A 4 26 16 27
B 19 23 49 5
a b c d
A 4 26 16 27
B 19 23 49 5
数组切片
# bool列表切片
#行切片
bool_list = [True,True,False]
print(df.loc[bool_list])
#列切片,bool_list长度跟列数量一致
bool_list = [True,True,False,False]
print(df.loc[:,bool_list])
#输出
a b c d
A 19 33 6 19
B 23 11 27 10
a b
A 19 33
B 23 11
C 7 38
#行切片
iloc_list = [0,2]
print(df.iloc[iloc_list])
#列切片,bool_list长度跟列数量一致
iloc_list = [0,2]
print(df.iloc[:,iloc_list])
#输出
a b c d
A 19 33 6 19
C 7 38 24 44
a c
A 19 6
B 23 27
C 7 24
聚合运算
DataFrame中默认的聚合运算是针对每列的
axis='columns',表示横向聚合,聚合每一行
axis='index',表示纵向聚合,聚合每一列
df = DataFrame(data = np.random.randint(1,50,size=(3,4)),columns=list('abcd'),index=list('ABC'))
print(df)
#默认列聚合
print(df.sum())
#输出
a b c d
A 19 33 6 19
B 23 11 27 10
C 7 38 24 44
a 49
b 82
c 57
d 73
dtype: int64
行聚合
#行聚合
print(df.sum(axis='columns'))
#输出
A 77
B 71
C 113
dtype: int64
列聚合
a 49
b 82
c 57
d 73
dtype: int64
运算
df1 = DataFrame(data = np.random.randint(1,50,size=(3,4)),columns=list('ABCD'),index=list('abc'))
print(df1)
print(df1 + 1)
#输出
A B C D
a 33 40 38 16
b 45 16 48 27
c 22 15 5 17
A B C D
a 34 41 39 17
b 46 17 49 28
c 23 16 6 18
print(df1)
print(df2)
#行列索引互相对齐,无法对齐就补NaN。
print(df1 + df2)
#输出
A B C D
a 33 40 38 16
b 45 16 48 27
c 22 15 5 17
A B C
a 47 36 38
b 10 48 33
A B C D
a 80.0 76.0 76.0 NaN
b 55.0 64.0 81.0 NaN
c NaN NaN NaN NaN
?系列文章索引
??
文章来源:https://blog.csdn.net/feikillyou/article/details/135134200
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!