公众号里的文章大多数需要编程基础,如果因为代码看不懂,而跟不上正文的节奏,可以来找我学习,相当于给自己一个新手保护期。我的课程都是循环开课。下一期的时间,点进去咨询微信↓ 生信分析直播课程(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
列为Female
且total_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:3, 0:3])
4.属性
写法与method类似,但不带括号。
df.shape #正确
## (3, 3)
df.shape()#错误
## TypeError: 'tuple' object is not callable