【数据科学】05 数据合并(merge、concat、combine)与数据清洗(缺失值、重复值、内容和格式)

实际应用中,需要分析的数据可能来自不同的数据集,因此在开始数据分析之前,需要先将不同的数据集合并。
pandas中提供了三种不同的数据合并方式:

1.1 merge()合并

pd.merge(left,right,[参数列表])

参数说明left参与合并的左侧DataFrame对象,

right参与合并的右侧DataFrame对象,

how连接方式,”inner”、”outer”、”left”、”right”其中之一,默认为”inner”on用于连接的列名(或列名列表);未指定改参数时,为左右数据集的公共列left_on左侧DataFrame对象中用于连接的键right_on右侧DataFrame对象中用于连接的键left_index布尔型,是否将左侧DataFrame对象的行索引用作连接键right_index布尔型,是否将右侧DataFrame对象的行索引用作连接键sort是否根据连接键对合并后的数据排序,默认为Truesuffixes字符串值元组,用于追加到重叠列名的末尾,默认为’_x’和’_y’

inner:内连接,连接两个DataFrame对象键值的交集的行
outer:外连接,连接两个DataFrame对象键值的并集的行
left:左链接,取出左侧DataFrame对象的全部行,连接右侧DataFrame对象键值匹配的行
right:右链接,取出右侧DataFrame对象的全部行,连接左侧DataFrame对象键值匹配的行

1.2 concat()合并

pd.concat(objs,axis,[参数列表])

参数说明objs需要连接的对象,如[df1, df2]axis连接的轴,默认为0;axis=0,按行堆叠;axis=1,按列堆叠join默认为”outer”,outer为并集/inner为交集ignore_indexignore_index 忽略需要连接的frame本身的index,当原本的index没有特别意义的时候可以使用join_axesIndex对象列表,用于其他n-1轴的特定索引,而不是执行内部/外部设置逻辑keys可以给每个需要连接的df一个labellevels序列列表,默认值无;用于构建MultiIndex的特定级别(唯一值)nameslist,default无,结果层次索引中的级别的名称verify_integrityboolean,default False;检查新连接的轴是否包含重复项copyboolean,default True

1.3 combine()合并

  • df1.combine_first(df2)
    专门针对df1中的空值进行处理。
    当行、列索引相同时:用df2数据集来填充df1中的缺失值
    当行、列索引不同时:结果中的列是两个数据集列的并集,结果中的行是两个数据集行的并集,并用df2的对应值填充df1中的NA值
    【数据科学】05 数据合并(merge、concat、combine)与数据清洗(缺失值、重复值、内容和格式)
  • df.combine(other, func, fill_value=None, overwrite=True)
    基于传递的函数执行与另一个DataFrame的逐列组合。
    使用func将DataFrame与其他 DataFrame 组合到按元素组合的列。生成的DataFrame的行索引和列索引将是两者的并集。

参数说明otherDataFrame,要按列合并的DataFramefunc将两个系列作为输入并返回一个Series或一个标量的函数,用于逐列合并两个数据帧fill_value标量值,默认None;在将任何列传递给合并函数之前填充NaN的值overwriteboolean,默认为True;如果为true,列自我不存在在其他将与NaN的覆盖


import pandas as pd
df = pd.DataFrame(
    {"A": ["001", None, "003", None, "005"],
     "B": ["1", "2", "3", "4", "5"]})
df["A"] = df["A"].combine(df["B"], lambda a, b: a if pd.notna(a) else b)

2.1 缺失值

1. 识别缺失值

  • df.isnull()
    判断dataframe每行每列的元素是否为缺失值,分别用False和True表示
  • df.isnull().any() && df.isnull().any(1)
    查看所有列、行是否 缺失值
  • df.isnull().all() && df.isnull().all(1)
    查看所有列、行是否 全部为缺失值

2. 处理缺失值

  • 滤除缺失值
    df.dropna(how, axis, thresh, inplace)

参数说明how取值为any或all,how=’all’值丢弃全部NA的行(列)axis轴向参数,默认为0;axis=0,丢弃行数据;axis=1,丢弃列数据thresh保留部分观测数据,例如thresh=3,则当一行(列)有3个或以上非NA值才保留inplace默认为False;inplace=True表示修改调用者而不产生副本

  • 填充缺失值
    df.fillna()

参数说明value用于填充缺失值的标量值或字典对象method用于填充缺失值的方法。method=’ffill’,向前填充;method=’bfill’,向后填充。也可以使用平均值或中位数等统计学方法,如method=df.mean()axis待填充的轴,默认axis=0,按列填充inplace默认为False;inplace=True表示修改调用者而不产生副本

注:不同列的缺失值用不同的数值来填充,需要构造{列索引名:值}形式的字典对象作为参数。


patient_data.fillna({'体重':patient_data['体重'].mean(),'心率':75}, inplace=True)

2.2 重复值

1. 查看重复值
df.duplicated()
查看DataFrame对象df中是否有重复行,返回一个布尔型的Series

2. 删除重复值
df.drop_duplicates()
删除df中重复的数据行,结果中默认保留 第一个出现的值组合,传入take_last=True则保留最后一个。

注:上面的两个方法会默认判断全部列,也可以对部分列进行重复项判断或删除,只需传入列名或列名的列表。

df.drop_duplicates(['column_a'])

2.3 内容与格式清洗

1. replace数据替换
df.replace(to_replace,value,[参数列表])

参数说明to_replace要替换掉的值value替换后的新值inplace是否修改原始数据,默认为False

如果一次需要修改多个值,则可以传入一个列表和要替换的值:

df.replace([270,1400],np.nan)

对不同的值进行不同的替换,传入一个替换关系组成的列表或字典:

df.replace({'U.S.A.':'USA','U.K.':'UK'})

2. iterrows()迭代器遍历
df.iterrows()
iterrows()返回值为元组(index,row)


for index,row in patient_data[rows_with_cm].iterrows():
        height =float(row['身高'][:-2])/100
        patient_data.at[i,'身高(m)'] = '{}'.format(round(height,2))

Original: https://blog.csdn.net/weixin_47575631/article/details/124177060
Author: 春杪无蜩
Title: 【数据科学】05 数据合并(merge、concat、combine)与数据清洗(缺失值、重复值、内容和格式)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/694258/

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

(0)

大家都在看

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