今天的心情额外糟糕,早上起来头痛无比,走路都摇摇晃晃的,都不知道是怎么回事,就多睡了一会,起来后好了一点,但还是很晕,不过在晕,也挡不住我写笔记的心,我相信坚持写,总会有突破的一天的。加油呀!
一、数据处理
1.1.数据的整体情况查看
在数据中,从小学开始,我们就知道有平均数,中位数等,这些都是数据重要的特征,而在DataFrame中,使用describe就可以获取信息,实例如下:
import pandas as pd
import numpy as np
df = pd.DataFrame(np.arange(1,10).reshape(3,3))
df.index = ['r1','r2','r3']
df.columns = ['c1','c2','c3']
print(df)
print(df.describe())
out:
c1 c2 c3 r1 1 2 3 r2 4 5 6 r3 7 8 9 c1 c2 c3 count 3.0 3.0 3.0 mean 4.0 5.0 6.0 std 3.0 3.0 3.0 min 1.0 2.0 3.0 25% 2.5 3.5 4.5 50% 4.0 5.0 6.0 75% 5.5 6.5 7.5 max 7.0 8.0 9.0
通过value_counts就可以快速查看某一列有几种数据。实例如下:
print(df['c1'].value_counts())
out:
1 1 4 1 7 1 Name: c1, dtype: int64
我们可以看到c1列共有3种数据,每种数据的频率为1
1.2 数据的运算,排序,和删除
在已有的列中,两列可以相减,或相加,得到一个新列,实例如下:
df['c4'] = df['c1']+df['c2']
print(df)
out:
c1 c2 c3 c4 r1 1 2 3 3 r2 4 5 6 9 r3 7 8 9 15
其次我们还可以对每列按大小排列,实例如下:
a = df.sort_values(by = 'c2',ascending = False)
print(a)
out:
c1 c2 c3 c4 r3 7 8 9 15 r2 4 5 6 9 r1 1 2 3 3
其中
by 是指定用那一列来排序,ascending默认为True 表示按升序排列,False 是按降序排列。
当然我们也可以用sort_index对索引进行排列,实例如下:
a = a.sort_index(ascending = False)
print(a)
out:
c1 c2 c3 c4 r3 7 8 9 15 r2 4 5 6 9 r1 1 2 3 3
最后就是数据的删除
实例如下:
df.drop(index = ['r3'],columns = ['c1'],inplace=True)
print(df)
out:
c2 c3 c4 r1 2 3 3 r2 5 6 9
其中index 是指定要删除的行,columns是要删除的列,inplace = True 时是在原表中进行修改,否则是返回一个新的DataFrame。
1.3.数据表拼接
pandas库还提供一系列高级功能,为表的拼接和重塑提供了极大的便利,主要涉及了merge()
,concat,append.等函数,实例如下:
merage:
import pandas as pd
df_1 = pd.DataFrame({'姓名':['小红','小明','小亮'],'成绩':[89,90,85]})
df_2 = pd.DataFrame({'姓名':['小红','小东','小亮'],'科目':['语文','英语','数学'],'排名':[2,1,3]})
print(df_1)
print(df_2)
# merage
df_3 = pd.merge(df_1,df_2)
print('merge:\n',df_3)
out:
姓名 成绩 0 小红 89 1 小明 90 2 小亮 85 姓名 科目 排名 0 小红 语文 2 1 小东 英语 1 2 小亮 数学 3 merge: 姓名 成绩 科目 排名 0 小红 89 语文 2 1 小亮 85 数学 3
可以看到merge可以根据相同的列,将两表进行合并,当然相同的列不可能只有一个,这时我们可以加入on = 列名 这个参数来指定列。默认的合并其实是取交集inner,当然我们也可以取并集outer实例如下:
df_4 = pd.merge(df_1,df_2,how = 'outer')
print(df_4)
out:
姓名 成绩 科目 排名 0 小红 89.0 语文 2.0 1 小明 90.0 NaN NaN 2 小亮 85.0 数学 3.0 3 小东 NaN 英语 1.0
我们可以看到数据被完整打印
如果想要保留左表,而对于右表数据不在意可以使how = ''left
cancat:
他是一种全连接方式,不用对齐,即不需要两个表有相同的列,强行进行合并。实例如下:
df_5 = pd.concat([df_1,df_2],axis = 0)
df_6 = pd.concat([df_1,df_2],axis = 0,ignore_index = True)
print(df_5)
print(df_6)
out:
姓名 成绩 科目 排名 0 小红 89.0 NaN NaN 1 小明 90.0 NaN NaN 2 小亮 85.0 NaN NaN 0 小红 NaN 语文 2.0 1 小东 NaN 英语 1.0 2 小亮 NaN 数学 3.0 姓名 成绩 科目 排名 0 小红 89.0 NaN NaN 1 小明 90.0 NaN NaN 2 小亮 85.0 NaN NaN 3 小红 NaN 语文 2.0 4 小东 NaN 英语 1.0 5 小亮 NaN 数学 3.0
其中默认axis = 0,及纵向连接axis = 1横向连接。df3的索引为原来两个表各自的索引,若想要重置索引,就可以使用ignore_index = True。
append 函数
append 可以看成concat的简化版,效果和 df5 类似实例如下:
df_7 = df_1.append(df_2)
print(df_7)
对于append来说,我们一般都是在列表中使用,但在DataFrame里面也可以用来添加数据,实例如下:
df_8 = df_1.append({'姓名':'小san','成绩':90,'科目':'地理','排名':8},ignore_index=True)
print(df_8)
out:
姓名 成绩 排名 科目 0 小红 89 NaN NaN 1 小明 90 NaN NaN 2 小亮 85 NaN NaN 3 小san 90 8.0 地理
总结:
pandas中除了数据的处理和数据表的拼接函数以外,还有比较多函数,像groupby等还没实现,但已经学习了基本的知识,其他函数将直接在后面案例中使用和介绍。