本篇为数据处理主要方法_DataFrame类型的第1篇,分享数据处理的主要操作,包括:排序、排名、索引重置、缺失值处理、去重。后续篇幅会继续梳理其他操作。

#会用到的包

import pandas
import numpy
import datetime

#排序

#方法1.
a=data.sort() #将data中的值按生序排列可用于Series,不可用于DataFrame:'DataFrame' object has no attribute 'sort'。

#方法2
a=data.sort_values(by='date',axis=0,ascending=True) #将data上的每一行按date列上值的大小由小到大排列。
a=data.sort_values('date',axis=0,ascending=True) #by=也可以省略。

#方法3
a=data.sort_index(axis=0,ascending=True,by='date') #作用同前。
a=data.sort_index(axis=0,ascending=True,'date') #作用同前

#方法4
a=data[::-1] #将数据按索引倒置,简单,推荐。

#排名

a=data.rank(axis=0,ascending=False) #返回每一列上的值的排名,ascending=False表示值越大排名越靠前,ascending默认为True。
a=data.rank(axis=1) #返回每一行上的值的排名,越小的值排名越靠前。

#索引重置

#将指定列设为索引
##方法1
data.index=data['date'] #将date列设为索引。

##方法2
date=data['date']
data.index=dates


#将整数数列设为索引
data.reset_index() #将索引设为从0开始的整数数列,原索引列得到保留并变成第1列值。
data.reset_index(drop=True) #将索引设为从0开始的整数数列,原索引列不保留。


#将日期索引转化为指定数据类型
##将日期由str转为datetime
dates=[dt.datetime.strptime(date,'%Y%m%d') for date in data.date] #date为str类型。
data.index=dates

##将日期由num转为datetime
dates=[dt.datetime.strptime(str(date),'%Y%m%d') for date in data.date] #date为num类型。
data.index=dates

#缺失值处理

#判断
data.isnull() #判断data中的值是否为缺失值,是返回True,不是返回False。
data.notnull() #判断data中的值是否为非缺失值,是返回False,不是返回True。

#提取
data=data[data.notnull()] #提取data中非缺失值的元素。
data=data[data.col1.notnull()] #提取data中col1列非缺失值所在的所有行。
s=data.col1[data.col1.notnull()] #提取data中col1列里的非缺失值。

#填充
##将非缺失值替换为缺失值
data.col1[0]=numpy.nan #将指定值替换为缺失值。
data.col1=numpy.nan #将指定列整列替换为缺失值。

##将缺失值用其他值填充
data.fillna(value,inplace=) #用指定值value填充缺失值。inplace=True填充结果直接覆盖原数据,False填充结果用新数据集表示,不覆盖原数据。
data.fillna(0) #用0填充缺失值,填充结果用新数据集表示,不改变原数据集。
data.fillna(0,inplace=True) #用0填充缺失值,填充结果直接覆盖原数据集。
data.fillna(method='',axis=0,limit=,inplace=) #用前/后值填充缺失值。
-method=:'ffill'用前一个值填充,'pad'用前一个值填充,'bfill'用后一个值填充,'backfill'用后一个值填充。
-axis=: 0为按列方向,1按行方向,默认为0.
-limit=n:连续缺失处仅填充n个。
-inplace=:True填充结果直接覆盖原数据,False填充结果用新数据集表示,不覆盖原数据。

#删除
data.dropna(axis=,how='',thresh=)
data.dropna() #删除有缺失值的行。
data.dropna(axis=1) #删除有缺失值的列。
data.dropna(axis=1,thresh=3) #删除有至少3个缺失值的列。
data.dropna(axis=1,how='any') #每列有1个缺失值就整列删除。
data.dropna(axis=1,how='all') #每列所有值都缺失时删除该列。

#去重

data.duplicated() #判断每一行是否相对于之前的行重复。
data.duplicated(data.columns) #同data.duplicated(),即判断每一行是否相对于之前的行重复。
data.duplicated(['col1']) #判断指定列上的元素是否相对于之前的值重复。
data.duplicated(['col1','col2']) #判断指定列中的每一行是否相对于之前的行重复。
data.drop_duplicates() #删除所有重复行。
data.drop_duplicates(['col1']) #判断指定列上是否有列方向上的重复值,若有,则删除重复值所在行。
df.drop_duplicates(['col1'], keep='last') # keep参数指定保留重复值中哪一个,’first’保留第一个,删除其他,’last’保留最后一个,’False’删除所有。

下篇预告:
-数据处理主要方法_DataFrame类型_2: 切片、合并、数列生成。

感谢阅读,转载请注明出处。

02-22 23:02