为帮助学习pandas,特意从和鲸社区中提炼出120道经典数据处理常见操作例题,从基础入门到进阶来更快速、更专业的角度理解pandas。主要包括:
- Pandas基础
- Pandas进阶
- 金融数据处理
- NumPy科学计算
- 一些补充
(https://www.heywhale.com/mw/project/5ef96ce863975d002c95fd8a/content)
正文:
将字典创建为DataFrame
#将字典创建为DataFrame
data_dict={
"Grammer":["Python","C","Java","GO",np.nan,"SQL","PHP","python"],
"Score":[1,2,np.nan,4,5,6,7,10]
}
data = pd.DataFrame(data_dict)
data
需求描述
1.数值列 空值填充;
2.空值的上一行与下一行的平均数进行填充
数据理解
1.根据数据可得数据列为Score;
2.数值列Score处于第三行,其中第二行Score值为2,第三行Score为4,则空值的上一行与下一行的平均数是(2+4)/2=3
代码实现
data['Score']=data['Score'].fillna(data['Score'].interpolate())
data
题外:
缺失数据填充fillna()使用
函数形式:fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)
参数:
- value:用于填充的空值的值。
- method: {'backfill', 'bfill', 'pad', 'ffill', None}, default None。定义了填充空值的方法, pad / ffill表示用前面行/列的值,填充当前行/列的空值, backfill / bfill表示用后面行/列的值,填充当前行/列的空值。
- axis:轴。0或'index',表示按行删除;1或'columns',表示按列删除。
- inplace:是否原地替换。布尔值,默认为False。如果为True,则在原DataFrame上进行操作,返回值为None。
- limit:int, default None。如果method被指定,对于连续的空值,这段连续区域,最多填充前 limit 个空值(如果存在多段连续区域,每段最多填充前 limit 个空值)。如果method未被指定, 在该axis下,最多填充前 limit 个空值(不论空值连续区间是否间断)
- downcast:dict, default is None,字典中的项为,为类型向下转换规则。或者为字符串“infer”,此时会在合适的等价类型之间进行向下转换,比如float64 to int64 if possible。
示例
1.将Score列空值填充为0
data['Score']=data['Score'].fillna(0)
data
2.用前面行的值,填充当前行的值
data['Score'].fillna(method='pad')
3.backfill / bfill表示用后面行/列的值,填充当前行/列的空值
data['Score']=data['Score'].fillna(method='backfill')
data
插值函数interpolate
DataFrame.interpolate(method=‘linear’, axis=0, limit=None, inplace=False, limit_direction=None, limit_area=None, downcast=None, **kwargs)
- method : str,默认为‘linear’,使用插值技术。之一:‘linear’:忽略索引,并将值等距地对待。这是MultiIndexes支持的唯一方法。‘time’: 处理每日和更高分辨率的数据,以内插给定的时间间隔长度。‘index’, ‘values’: 使用索引的实际数值。'pad':使用现有值填写NaN。‘nearest’, ‘zero’, ‘slinear’, ‘quadratic’, ‘cubic’, ‘spline’, ‘barycentric’, ‘polynomial’: 传递给 scipy.interpolate.interp1d。这些方法使用索引的数值。‘polynomial’ 和 ‘spline’ 都要求您还指定一个顺序(int),例如 ,df.interpolate(method='polynomial', order=5)'krogh','piecewise_polynomial','spline','pchip','akima':环绕类似名称的SciPy插值方法。请参阅注释。
axis : {0或'index',1或'columns',None},默认为None,沿轴进行interpolate。
limit : 整数,可选,要填充的连续NaN的最大数量。必须大于0。
inplace : bool,默认为False尽可能更新数据。
limit_direction : {'forward','backward','both'},默认为'forward',如果指定了限制,则将沿该方向填充连续的NaN。
limit_area : {None, ‘inside’, ‘outside’}, 默认为None,如果指定了限制,则连续的NaN将填充此限制。None:无填充限制。‘inside’:仅填充有效值(interpolate)包围的NaN。‘outside’: 仅在有效值之外(extrapolate)填充NaN。0.23.0版中的新功能。
downcast : 可选, ‘infer’ 或None,默认为None,如果可能,请向下转换dtype。
**kwargs,关键字参数传递给插值函数。
1.填充NaN在Series通过线性内插
s = pd.Series([0, 1, np.nan, 3])
s.interpolate()
总结:本次案例利用了两个函数:分别是fillna()、interpolate(),根据不同函数性质,对数据进行处理。