Pandas基本操作
具体数据文件
1、apply()函数
通过pandas新增一列,值为将时间戳转化成日期。例如1600123456 -> 20200914
import pandas as pd import time def get_year_month_day(row): """将时间戳转化成日期""" sc = time.gmtime(row.time) result = time.strftime("%Y%m%d", sc) return result[:8] pd = pd.read_excel("info.xls") print(pd) pd["date"] = pd.apply(get_year_month_day,axis=1) #对列进行操作 print(pd.head())
2、drop_duplicates()去重函数
drop_duplicates(inplace=True,subset=['col1','col2'],keep='first')
inplace=True 表示就地删除
subset:某些列相同的删除
keep : 值有first,last,False 分别表示保留重复项的第一个,保留最后一个,删除所有重复项,默认是first
import pandas as pd pd = pd.DataFrame([[1,2,3],[3,4,5],[1,2,3],[1,1,3]]) pd.columns = ['a','b','c'] #给每列命名 print(pd) #只删除a,b列完全相同的行数据,保留重复数据的最后一条 pd.drop_duplicates(inplace=True,keep="last",subset=['a','b']) print(pd.head())
3、pivot_table()数据透视函数
pivot_table(index='class',columns='subject',values='grades') (index或columns两个参数至少要有一个,values如果未指定,取均值)
index : 拿出一个Series对象的值作为行名
columns : 拿出一个Series对象的值作为列名
values :拿出一个Series对象的值作为行列的值,形成一个二维视图。
aggfunc : count(计数),max(最大值),min(最小值),mean(均值,默认)
import pandas as pd df = pd.DataFrame({'student': ['小红', '小红', '李华', '李华', '小天', '小天'], 'class': ['001','001','001','001','002','002'], 'subject': ['C', 'Java', 'Python', 'C', 'C', 'Python'], 'grades': [80, 90, 78, 90, 80, 78]}) # print(df) # print("-"*20) """ 每个科目的均值 """ #由于只有grade是数值类型,因此只对其求均值 df1 = df.pivot_table(index="subject") # print(df1) # print("-"*20) """ 求每班均值 """ df2 = df.pivot_table(columns="class") # print(df2) # print("-"*20) """ 求每个班级各个科目的均分 """ #由于数据只有grade数值型,values也可以省略 df3 = df.pivot_table(index="class",columns="subject",values="grades") # print(df3) # print("-"*20) """ 求各个班级各个科目的最高分 """ df4 = df.pivot_table(index="class",columns="subject",values="grades",aggfunc="max",fill_value=0) # print(df4) # print("-"*20) """ 统计各个班级各个科目的人数 """ df5 = df.pivot_table(index="class",columns="subject",values="grades",aggfunc="count",fill_value=0) #print(df5) # print("-"*20) """ 求每个学生的最高分,最低分,平均分 """ df6 = df.pivot_table(index="student",values="grades",aggfunc=['max',"min","mean"]) # print(df6) # print("-"*20)
4、merge()合并函数
merge() df合并函数
on="key" 以key关键字作为连接键。
how = ['left','right','outer','inner'] 仅使用左边表的关键字,右边,交集,并集
left : 仅考虑左边组合键的值
right : 仅考虑右边组合键的值
outer : 所有组合键的值,空值为NaN
inner : 默认 ,所有组合键的有效值
import pandas as pd eft = pd.DataFrame({'key1': ['K0', 'K0', 'K1', 'K2'], 'key2': ['K0', 'K1', 'K0', 'K1'], 'A': ['A0', 'A1', 'A2', 'A3'], 'B': ['B0', 'B1', 'B2', 'B3']}) right = pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'], 'key2': ['K0', 'K0', 'K0', 'K0'], 'C': ['C0', 'C1', 'C2', 'C3'], 'D': ['D0', 'D1', 'D2', 'D3']}) print(left) print(right) result1 = pd.merge(left,right,on=["key1","key2"]) #print(result1) result2 = pd.merge(left,right,how='left',on=['key1','key2']) print(result2) result3 = pd.merge(left,right,how='outer',on=['key1','key2']) print(result3)
5、get_dummies() : 将离散值one-hot化
get_dummies() : 将一列离散值数据one-hot化
data:df["salary"]
prefix : 前缀
prefix_seq : 前缀与值的连接符
import pandas as pd all = pd.DataFrame({'key1': ['K0', 'K0', 'K1', 'K2'], 'key2': ['K0', 'K1', 'K0', 'K1'], 'A': ['A0', 'A1', 'A2', 'A3'], 'B': ['B0', 'B1', 'B2', 'B3']}) print(all['key1']) all_left = pd.get_dummies(all["key1"],prefix="key1",prefix_sep="_") print(all_left)
6、concat()函数:合并两个视图
参数值:
data:两个需要合并的数据,放在一个列表
axis: 在某个维度进行合并
import pandas as pd data1 = pd.DataFrame({ "col1":[1,1,1], "col2":[2,2,2] }) data2 = pd.DataFrame({ "col1":[3,3,3], "col2":[4,4,4] }) all = pd.concat([data1,data2],axis=1) print(all)