pandas 预处理

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

pandas 预处理
df.drop_duplicates('A')

pandas 预处理
df.drop_duplicates(['A','B'])

pandas 预处理
df.drop_duplicates(['A','B']).reset_index()

pandas 预处理

注意:drop_duplicates删除重复行时,行索引也会删除。需要重置索引
data.reset_index(drop=True)
获得新的index,原来的index变成数据列,保留下来。
不想保留原来的index,使用参数 drop=True,默认 False。

df.drop_duplicates(['A','B']).reset_index(drop=True)

pandas 预处理

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()

pandas 预处理
可以指定指定空数据类型:
比如
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

pandas 预处理
pandas 预处理

(pima的数据来源在下面的github地址)
数据放到github上了
点击此处

; 6数据类型转换

  1. astype()强制转化数据类型
  2. 通过创建自定义的函数进行数据转化
  3. 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

pandas 预处理
df['x'].astype(float)
df['x']=df['x'].astype(float)
df['x'].dtype

pandas 预处理
def f(x):
    return x.replace('%','')
df['z']=df['z'].map(f)
df

pandas 预处理
df['sex']=['female','male','female','male','male']
print(df)
df['sex']=np.where(df['sex']=='female',1,0)
df

pandas 预处理
df['r']=pd.to_datetime(df['r'])
df['r'].dtypes

pandas 预处理
pd.to_numeric(df['w'],errors='coerce')

pandas 预处理
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/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球