pandas

一 、pandas 基本操作

(一)、查看基本数据

1、查看dataframe的前n行或尾n行

  • 固定的是n=5

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_csvfile_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.dropnaaxis=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)  #使用索引列降序排列

    原文作者:聂红波
    原文地址: https://zhuanlan.zhihu.com/p/37404265
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞