排序
In [9]: df.sort_values(['数学','语文']).head() # 先按数学成绩进行排序,若数学成绩相同,则按语文成绩排序
Out[9]:
序号 | 姓名 | 性别 | 语文 | 数学 | 英语 | 物理 | 化学 | 生物 | |
---|---|---|---|---|---|---|---|---|---|
2 | 3 | yue | 女 | 90 | 66 | 87 | 78 | 73 | 86 |
0 | 1 | jin | 女 | 95 | 66 | 85 | 75 | 79 | 89 |
5 | 6 | chen | 男 | 78 | 69 | 58 | 52 | 92 | 62 |
4 | 5 | mu | 女 | 55 | 86 | 95 | 72 | 76 | 79 |
1 | 2 | li | 男 | 88 | 87 | 68 | 92 | 82 | 63 |
访问
In [10]:# 按照索引去定位
df.loc[1]
Out[10]:
序号 2 姓名 li 性别 男 语文 88 数学 87 英语 68 物理 92 化学 82 生物 63 Name: 1, dtype: object
索引
In [11]:scores = {
'英语':[97,84,68], '数学':[65,78,56], '姓名':['wang','jin','li'] }
df = pd.DataFrame(scores, index=['one','two','three'])
df
Out[11]:
姓名 | 数学 | 英语 | |
---|---|---|---|
one | wang | 65 | 97 |
two | jin | 78 | 84 |
three | li | 56 | 68 |
In [12]:df.index
Out [12]:Index(['one', 'two', 'three'], dtype='object')
In [13]: # 此时不存在数字索引,所以不能通过数字索引去访问
# df.loc[1]
df.loc['one']
Out[13]:
姓名 wang 数学 65 英语 97 Name: one, dtype: object
In [14]:# 实实在在的所谓的第几行
df.iloc[0]
Out[14]:
姓名 wang 数学 65 英语 97 Name: one, dtype: object
In [15]:# 访问某一行,下面写法错误
# df[0]
#访问多行数据是可以使用切片的
df[:2]
Out[15]:
序号 | 姓名 | 性别 | 语文 | 数学 | 英语 | 物理 | 化学 | 生物 | |
---|---|---|---|---|---|---|---|---|---|
0 | 1 | jin | 女 | 95 | 66 | 85 | 75 | 79 | 89 |
1 | 2 | li | 男 | 88 | 87 | 68 | 92 | 82 | 63 |
In [16]:df.values Out[16]:array([[1, ' jin', ' 女', 95, 66, 85, 75, 79, 89], [2, ' li', ' 男', 88, 87, 68, 92, 82, 63], [3, ' yue', ' 女', 90, 66, 87, 78, 73, 86], [4, ' wang', ' 女', 82, 97, 78, 96, 92, 53], [5, ' mu', ' 女', 55, 86, 95, 72, 76, 79], [6, ' chen', ' 男', 78, 69, 58, 52, 92, 62]], dtype=object) In [17]:# dataframe中的数组 df.数学.values Out[17]:array([66, 87, 66, 97, 86, 69], dtype=int6 In [18]:# 简单的统计 df.数学.value_counts() #数学分值有多少人 Out[18]: 66 2 87 1 86 1 69 1 97 1 Name: 数学, dtype: int64
# 提取多列
In [19]:new = df[['数学','语文']].head()
new
数学 | 语文 | |
---|---|---|
0 | 66 | 95 |
1 | 87 | 88 |
2 | 66 | 90 |
3 | 97 | 82 |
4 | 86 | 55 |
重点
In [20]:def func(scores):
if scores >= 80:
return '优秀'
elif scores >= 70:
return '良'
elif scores >= 60:
return '及格'
else:
return '不及格'
df['数学分类'] = df.数学.map(func)
In [21]:df
Out[21]:
序号 | 姓名 | 性别 | 语文 | 数学 | 英语 | 物理 | 化学 | 生物 | 数学分类 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | jin | 女 | 95 | 76 | 85 | 75 | 79 | 89 | 良 |
1 | 2 | li | 男 | 88 | 87 | 68 | 92 | 82 | 63 | 优秀 |
2 | 3 | yue | 女 | 90 | 66 | 87 | 78 | 73 | 86 | 及格 |
3 | 4 | wang | 女 | 82 | 97 | 78 | 96 | 92 | 53 | 优秀 |
4 | 5 | mu | 女 | 55 | 86 | 95 | 72 | 76 | 79 | 优秀 |
5 | 6 | chen | 男 | 78 | 69 | 58 | 52 | 92 | 62 | 及格 |
In [22]:# applymap 对dataframe中所有的数据进行操作的一个函数,非常重要
def func(number):
return number+10
# 等价
func = lambda number: number+10
df.applymap(lambda x: str(x) + '-')
序号 | 姓名 | 性别 | 语文 | 数学 | 英语 | 物理 | 化学 | 生物 | 数学分类 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 1- | jin- | 女- | 95- | 76- | 85- | 75- | 79- | 89- | 良- |
1 | 2- | li- | 男- | 88- | 87- | 68- | 92- | 82- | 63- | 优秀- |
2 | 3- | yue- | 女- | 90- | 66- | 87- | 78- | 73- | 86- | 及格- |
3 | 4- | wang- | 女- | 82- | 97- | 78- | 96- | 92- | 53- | 优秀- |
4 | 5- | mu- | 女- | 55- | 86- | 95- | 72- | 76- | 79- | 优秀- |
5 | 6- | chen- | 男- | 78- | 69- | 58- | 52- | 92- | 62- | 及格- |