1.清除空值
如果我们要删除包含空字段的行,可以使用 dropna() 方法
DataFrame.dropna(axis=0, how=’any’, thresh=None, subset=None, inplace=False)
-
axis:默认为 0,表示逢空值剔除整行,如果设置参数 axis=1 表示逢空值去掉整列。
-
how:默认为 ‘any’ 如果一行(或一列)里任何一个数据有出现 NA 就去掉整行,如果设置 how=’all’ 一行(或列)都是 NA 才去掉这整行。
-
inplace:如果设置 True,将计算得到的值直接覆盖之前的值并返回 None,修改的是源数据。
2.去除重复值
drop_duplicates()
keep: 可选参数有三个:’first’、 ‘last’、 False, 默认值 ‘first’。其中:
- first表示: 保留第一次出现的重复行,删除后面的重复行。
- last表示: 删除重复项,保留最后一次出现。
- False表示: 删除所有重复项。
subset : 接收string或sequence。表示进行去重的列。默认为None,表示全部列
inplace:布尔值,默认为False,是否直接在原数据上删除重复项或删除重复项后返回副本。
data={'A':['one','one','one','two','two','two'],
'B':[1,1,2,1,1,2],
'C':[1,2,3,4,5,6],
}
df=pd.DataFrame(data)
df
df.drop_duplicates('A')
df.drop_duplicates(['A','B'])
df.drop_duplicates(['A','B']).reset_index()
注意:drop_duplicates删除重复行时,行索引也会删除。需要重置索引
data.reset_index(drop=True)
获得新的index,原来的index变成数据列,保留下来。
不想保留原来的index,使用参数 drop=True,默认 False。
df.drop_duplicates(['A','B']).reset_index(drop=True)
3.修改异常值
for x in n.index:
if n.loc[x,'recently_logged'] == '--':
n.loc[x, 'recently_logged'] = n.loc[x, 'register_time']
n.loc[n['recently_logged'] == '--', 'recently_logged'] = n.loc[n['recently_logged'] == '--', 'register_time']
df.loc[df['Sex'] == 'female', 'Sex'] = 0
df.loc[df['Sex'] == 'male', 'Sex'] = 1
for x in df.index:
if df.loc[x, "age"] > 120:
df.drop(x, inplace = True)
4.判段是否非空
isnull() 判断各个单元格是否为空
查看数据整体的缺失值情况
isnull().sum()
可以指定指定空数据类型:
比如
missing_values=[“n/a”, “na”]
; 5.填充空值
fillna()
df.fillna(0)
用均值填充空值
x = int(df["a"].mean())
df["a"].fillna(x, inplace = True)
类似可以使用median()中位数,mode()众数
注意上面的int()或者根据需要改成float,不进行类型转换是pandas.core.series.Series无法填充
参数method:’bfill’ 用缺失值后面的数填充缺失值
‘ffill’用缺失值前面的数填充。
df.fillna(method='ffill', inplace=True)
原始数据点击提取码:pfnw
(pima的数据来源在下面的github地址)
数据放到github上了
点击此处
; 6数据类型转换
- astype()强制转化数据类型
- 通过创建自定义的函数进行数据转化
- pandas提供的to_nueric()以及to_datetime()
import pandas as pd
import numpy as np
data={
'x':[1,2,3,4,5],
'y':['a','b','c','d',np.nan],
'z':['12%','13%','24%','22%','44%'],
'r':['2021','2022','2033','2012','2019'],
'w':[11,22,33,44,'a']
}
df=pd.DataFrame(data)
df
df['x'].astype(float)
df['x']=df['x'].astype(float)
df['x'].dtype
def f(x):
return x.replace('%','')
df['z']=df['z'].map(f)
df
df['sex']=['female','male','female','male','male']
print(df)
df['sex']=np.where(df['sex']=='female',1,0)
df
df['r']=pd.to_datetime(df['r'])
df['r'].dtypes
pd.to_numeric(df['w'],errors='coerce')
arg : scalar(标量),list(列表),
(tuple)元组,一维数组(1-d array)或Series
errors : {‘ignore’,’raise’,’coerce’},
默认为’raise’如果为’raise’,则无效的解析将引发异常如果为 ‘coerce’,则将无效解析设置为NaN如果为 ‘ignore’,则无效的解析将返回输入
Original: https://blog.csdn.net/m0_52118763/article/details/120580433
Author: 开始King
Title: pandas 预处理
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/753239/
转载文章受原作者版权保护。转载请注明原作者出处!