R用户要整点python--pandas数据框取子集

科技   2024-08-25 10:54   江苏  
 今天是生信星球陪你的第985天

   
公众号里的文章大多数需要编程基础,如果因为代码看不懂,而跟不上正文的节奏,可以来找我学习,相当于给自己一个新手保护期。我的课程都是循环开课。下一期的时间,点进去咨询微信↓
生信分析直播课程(2024.9.2下一期)
生信新手保护学习小组(预计8.23下一期)
单细胞陪伴学习小组(预计8.29下一期)

昨天忘了发了!周末要去南京讲一场单细胞的线下课,我讲R语言部分。因为做了单细胞方向的定制,所以要重新备课啦。趁娃睡了一直搞,猛地一抬头一点半了。过点儿了我去。今天也是猛地一抬头十一点半了。

1.创建数据框

手动创建 DataFrame 的方法是将字典传递给 pandas 中的 DataFrame() 函数。
字典的键是列名,值是每列值。
还可以指定一个额外的参数 index 来指定 DataFrame 的行名。

import pandas as pd
df = pd.DataFrame({
    'A' : [1,2,3],
    'B' : [4,5,6],
    'C' : [7,8,9]},
    index = ['x','y','z'])
df
## A  B  C
## x  1  4  7
## y  2  5  8
## z  3  6  9


2.数据框提取列


(1)提取一列

点号或者方括号都可以。但是,如果列名中有空格,或者列名与 DataFrame 属性冲突,就不能用点号。

df['A']
## x    1
## y    2
## z    3
## Name: A, dtype: int64
df.A
## A  B
## x  1  4
## y  2  5
## z  3  6


(2)提取多列

在方括号里写有列名组成的列表。

df[['A','B']]
## A  B
## x  1  4
## y  2  5
## z  3  6

练习:数据框提取列

用点号取子集的方法,输出 tips数据框中的 tip 列。
用方括号取子集的方法,输出tip数据框的sex列。

# Print the tip column using dot notation
print(tips____)

# Print the sex column using square bracket notation
print(tips____)

# Print the tip and sex columns
print(tips____)

答案

# Print the tip column using dot notation
print(tips.tip)

# Print the sex column using square bracket notation
print(tips['sex'])

# Print the tip and sex columns
print(tips[['tip','sex']])


3.数据框提取行


(1).loc 按照行列名取子集

可以用行名或逻辑值(.loc )或行索引(.iloc )对行进取子集,索引依然从0开始。

df.iloc[0#取第一行
## A    1
## B    4
## C    7
df.iloc[0,]#逗号后面表示列,空着表示全选
## A    1
## B    4
## C    7
## Name: x, dtype: int64
df.iloc[0,:] #逗号后面表示列,:表示占位置
## A    1
## B    4
## C    7
df.iloc[[0,1],]#前两行
##    A  B  C
## x  1  4  7
## y  2  5  8
df.iloc[0:2,]#前两行,右边不包含
##    A  B  C
## x  1  4  7
## y  2  5  8


(2).loc按照逻辑值取子集

按照逻辑值取子集的话,.loc可以写也可以不写。
如果按照逻辑值取子集,向 .loc 传递一个布尔表达式,并且将返回与布尔表达式匹配的所有行。
使用多个条件时,可以分别对 'and' 和 'or' 使用 &| 运算符。记住,需要将每个条件语句括在括号内。

df[df.A==3]
##    A  B  C
## z  3  6  9
df.loc[df.A==3]
##    A  B  C
## z  3  6  9

df[(df.A==3)|(df.B==4)]
##    A  B  C
## x  1  4  7
## z  3  6  9
df.loc[:,df.loc['x']==1#也可以按照逻辑值取列
##  A
## x  1
## y  2
## z  3
df.loc[,df.loc['x']==1#冒号不能省略
## Cell In[111], line 1
##     df.loc[,df.loc['x']==1]
##            ^
## SyntaxError: invalid syntax


(3).iloc按照索引取子集

df.loc['x'#取行名为x的行
## A    1
## B    4
## C    7
## Name: x, dtype: int64
df.loc[['x','y']] #取行名为x和y的行
##    A  B  C
## x  1  4  7
## y  2  5  8
df.loc['x','A'# x行,A列
## np.int64(1)
df.loc[['x','y'],['A','B']] #xy行,AB列
##    A  B
## x  1  4
## y  2  5


练习:数据框提取行

课程使用的示例数据是tips,来自seaborn包,内容如下:

import seaborn as sns

tips = sns.load_dataset('tips')
tips.head()
## total_bill   tip     sex smoker  day    time  size
## 0       16.99  1.01  Female     No  Sun  Dinner     2
## 1       10.34  1.66    Male     No  Sun  Dinner     3
## 2       21.01  3.50    Male     No  Sun  Dinner     3
## 3       23.68  3.31    Male     No  Sun  Dinner     2
## 4       24.59  3.61  Female     No  Sun  Dinner     4

使用 iloc 输出tips 数据框 的第一行。
提取tips数据框中sex列为Female的行。
提取tips数据框中sex列为Femaletotal_bill大于15的行。

# Print the first row of tips using iloc
print(tips____)
# Print all the rows where sex is Female
print(tips.___[____])
# Print all the rows where sex is Female and total_bill is greater than 15
print(tips____)
# Print the first row of tips using iloc
print(tips.iloc[0])

# Print all the rows where sex is Female
print(tips.loc[(tips.sex=="Female")])

# Print all the rows where sex is Female and total_bill is greater than 15
print(tips.loc[(tips.sex == 'Female')&(tips.total_bill>15)])


练习:数据框取行和列

选择sex列为Female的行,同时依次只保留total_bill,tip,sex列。
提取前3行前3列

# Subset rows and columns
print(tips.____[____, ____])

# 3 rows and 3 columns with iloc
print(tips____[____, ____])
# Subset rows and columns
print(tips.loc[tips.sex == 'Female', ['total_bill','tip','sex']])
# 3 rows and 3 columns with iloc
print(tips.iloc[0:30:3])


4.属性

写法与method类似,但不带括号。

df.shape #正确
## (3, 3)
df.shape()#错误
## TypeError: 'tuple' object is not callable

生信星球
一个零基础学生信的平台-- 原创结构化图文/教程,精选阶段性资料,带你少走弯路早入门,收获成就感,早成生信小能手~
 最新文章