一 、pandas 基本操作
(一)、查看基本数据
1、查看dataframe的前n行或尾n行
df = pandas.Dataframe(columns=[],index=[],data=[]) ## 创建一个Dataframe
df.head() #查看前5行的数据
df.tail() #查看尾5行的数据
2、查看索引名、列名、values
df.index #返回df的行索引值,是一个array
df.columns #返回df的列名,是一个array
df.values #返回df的所有值,是一个2D array
3、查看dataframe的一些统计特性
df.describe() # 统计没类的 min、max、mean、std、quantile
df.dtypes #返回每列数据的类型
df.T # 转置数据框
df.sort_index(axis=1,ascending=False)#按索引排序所有列,升序或者降序
4、对数据类型进行转换
a、对于Series 使用 pd.to_numeric( )
pd.to_numeric(s_name,errors='raise') # 默认情况下,不能处理字符串(string)
pd.to_numeric(s_name,errors='coerce') #可以将无效值强制转换为NaN
pd.to_numeric(s_name,errors='ignore') #将无效值直接忽略
b、 对于多列或者整个DataFrame
DataFrmae.apply()
df[['column_name1','column_name2']] = df[['column_name1','column_name2']].apply(pd.to_numeric)
df.apply(pd.to_numeric,errors='ignore')
df.infer_objects() # 用于将具有对象数据类型的dataframe的列转换为更具体的类型。
df[['column_name1','column_name2']] = df[['column_name1','column_name2']].astype(float) #强制转换 float ,int ,
(二 )、对列切片
1、取一列的所有数据
df.['column_name'] # 利用列名直接取某一列
df[df.columns[index]]#按照第几列的index来取数据
2、根据位置取行列数据df.loc
df.loc[index]# 根据行的位置,取特定行数据(列全取)
df.loc[[index],['a','b']] #取index行的,a、b两列数据
df.loc[[index],'a':'b'] #取index行,列名为‘a’到‘b’的所有列
# 列不能通过索引来取数
3、根据index位置来取数 df.iloc
df.iloc[0:10,0:10] #切片后面的值取不到,即col_index=10,row_index=10 取不到
df.iloc[[0,5,10],[1,8,10]]#可按照需求,选择特定的行和列
# 总之iloc之内的数据都是数字,不能是行名列名
4、根据条件,逻辑值索引取数
df[df.a>0] #取出A列中大于0的数
df[df['A'].isin(['one','two'])] #取出A列中包含‘one’,'two'的数据,这个功能很强大,
# 可以用 filter 出符合条件的数据
5、给列赋值
df.['A']=np.array([1]*len(df)) #用数组给某列赋值
df.loc[:,['a','c']]=[] #根据位置赋值
(三) 、按列排序
df.sort_values(by='column_Name',ascending=True) #按某列升序排序
df.sort_index(axis=1,ascending=True #按索引排序)
(四)、合并操作
1、将数据框的行或列合并(concat)
pd.concat([df1[:],df2[:],...],axis=0) #按列拼接数据,要求列数和列名一样
pd.concat([df1,df2,...],axis=1) #按行拼接数据,行数和行索引相同
#如果数据结构不一样,可以选择join='inner','outer',...sql中的操作
2、append将一行或多行数据添加
df.append(df1[:],ignore_index=True) #将会重新设定index
3、将多个dataframe整合在一起Merge
df.merge(df1,on=['column_name',...],how=inner) #内联表,根据主键来拼接
how = 'inner','left','right','outer'分别表示内连接,左连接,右连接,外连接
#语法符合SQL中的表连接操作
(五)、分组操作Groupby
1、Groupby for splitting 把数据分成已有的几种类别
grouped = df.groupby(key) # 将某个主键按照类别分组,默认是列主键
grouped = df.groupby(key,axis=1) #按照某个key分组,行操作
grouped = df.groupby([key1,key2,...]) #可以依次groupd 多个key
grouped.groups #返回分组的结果
grouped.get_group('a') # 选择其中一个分组的类别,查看该类别的数据。
2、 Groupby for aggregation 分组聚合
grouped.aggregaate(np.sum) #分组求和,常见操作
grouped.size() #分组统计数量
grouped.describe() # 分组查看描述统计结果
3、 Groupby for applying 分组求各种函数
grouped.agg([np.sum,np.std,np.mean]) #同时求和,均值方差
grouped.apply(lambda x : function(x))# 可以接上apply函数,进行自定义操作
4、Groupby for filtering 分组过滤数据
grouped.filter(lambda x :len(x)>2,dropna=True)
(六)、设置结果显示
pd.set_option('display.height',200) #设置显示结果的高度
pd.set_option('display.max_seq_items',200) #设置序列显示的最大个数
pd.set_option('display.max_columns',120) #设置数据框显示列数
pd.set_option('display.max_rows',50)#设置数据框显示的行数
(七) 、数据框写入Excel或者csv
1、 数据读取
pd.read_csv(file_path,header=,sep=',',index_col=,...)
pd.read_excel(file_path,sheetName='',startcol=,startrow=,header=,...)
pd.read_sql(sql,coon)
2、写入数据
writer = pd.ExcelWriter('excel_name.xisx')
df.to_excel(writer,sheetName='dfName',startcol=,startrow=,...)
writer.save()
(八)、数据规整化
(九)、去除重复项
1、 pandas ,drop_duplicates 去除重复项
df.drop_duplicates(subset=None,keep='first',inplace=False) #对Dataframe 去除特定列下面的重复行,返回dataframe格式数据。
- subset:column label or sequence of labels,optional #用来指定特定的列,默认所有列
- keep :{‘first’,’last’,’False’},default’first’ # 删除重复项并保留第一次出现的项
- inplace:boolean ,default False # 是直接在原来数据上修改还是保留一个副本
二、Python 数据清洗
(1)、将两张表拼接在一起
pd.merge(table1,table2,left_on = '左属性',right_on=‘右属性’,how='outer') how = 'left','right','outer','inner'
pd.concat([table1,table2],axis=0) #这里的拼接 axis=0 按列拼接,axis=1 按行拼接
(2)、缺失值处理
df.apply(lambda x:sum(x.isnull()),axis=0) # 查看表里各列缺失值的个数
x=df[pd.isnull(df['column_name'])]
len(x)
#查看某一属性列缺失值的详细情况
df['column_name']=df['column_name'].fillna(值)# 均值,众数 或者直接删除
df.dropna (axis=0) #删除含缺失值的所有行
df.dropna(axis=1) #删除含缺失值的所有列
(3)、基本处理
df.strip('abc') # strip是首位两端开始去掉在‘abc max min????
df.replace('abc','123') #replace 是一整块替换,将值里面‘abc’整块替换为‘123’,必须是‘abc’一整块的才会替换
(4)、删除列与行
del df['column_name'] # 删除某一列
df.drop(i) #删除第i行
(5)、时间处理
from datetime import datetime
datetime.now() #查看现在时间
datetime.date(时间) #只保留年月日
pd.to_datetime(df['时间列名'],format='%Y/%m/%d')
(6) 、按照value获取数据
a = df[df['column_name'=='value']
print(a)
a = df[df['column_name'].isin(['value1','value2'])]
print(a)
(7)、去重 duplicated( )
df.duplicated(['column_name1','column_name2']) #返回bool型
df.drop_duplicates(['column_name1','column_name2']) #去掉重复的,默认返回第一个出现的;保留最后一次出现(take_last=True)
(8) 、统计
a = df['column_name1'].groupby([df['column_name2'],df['column_name3']]).count()
#先按照 属性2,再按照属性3,分类统计属性1
a = pd.DataFrame(a)
#把它转化为dataframe表格格式
(9) 、 排序
a 、对于列表排序(sorted,sort)
sorted(list) #默认升序,reserve = True降序, 不会改变原来list
list.sort() #默认升序,reserve = True降序,会改变原来的list
b、对字典排序(sorted)
sorted(dict) # 根据字典的键排序,只返回排列好的字典的键,并没有值
sorted(dict.items(),key=lambda item :item[1]) # 根据字典的键值排序,以列表的形式返回排列好的元组数组
dict.items() # 以列表形式返回可遍历的(key ,values)元组数组
# 若其中的对应参数改为 item[0],则对应的是键本身
# 默认为升序,加上参数 reserve=True 会变为降序
c、 对dataframe、numpy 排序
df.sort(by=['column_name1','column_name2']) #先按属性1排列,再按属性2排列
df.sort_values(by='column_name1',ascending = False) #按属性1降序排列,默认为升序排列
df = df.set_index('column_name1') #设置属性1对应的列为索引列
df.sort_index() #使用设置的索引进行排序
df.sort_index(ascending=False) #使用索引列降序排列