python数据分析与机械学习--项目笔记

pd.merger (how=left) 左连接

import pandas as pd

# 假设 test 和 gender_submission 数据框如下:
test = pd.DataFrame({
    'PassengerId': [1, 2, 3, 4],
    'Name': ['John', 'Alice', 'Bob', 'Eve']
})

gender_submission = pd.DataFrame({
    'PassengerId': [1, 2, 3],
    'Survived': [0, 1, 1]
})

# 执行左连接
full_test = pd.merge(test, gender_submission, on='PassengerId', how='left')

print(full_test)

运行结果

PassengerId   Name  Survived
0            1   John       0.0
1            2  Alice       1.0
2            3    Bob       1.0
3            4    Eve       NaN

定义: 左连接会返回左表(在你的例子中是 test)中的所有行(即以左表的on参数所在列为参考,参数固定为left表,on列的所有行,不多不少),并且将右表(gender_submission)中的匹配行附加到这些行。如果右表中没有与左表匹配的行,则结果中该行对应的右表列将包含缺失值(NaN)

left, right 比较

import pandas as pd

# 示例数据
left_table = pd.DataFrame({
    'ID': [1, 2, 3, 4],
    'Name': ['Alice', 'Bob', 'Charlie', 'David']
})

right_table = pd.DataFrame({
    'ID': [3, 4, 5, 6],
    'Age': [23, 34, 45, 56]
})


#左连接
   ID     Name   Age
0   1    Alice   NaN
1   2      Bob   NaN
2   3  Charlie  23.0
3   4    David  34.0



#右连接 结果
   ID     Name  Age
0   3  Charlie   23
1   4    David   34
2   5      NaN   45
3   6      NaN   56

pd.merge 和 pd.concat区别

  • concat 用于简单的沿轴连接,不涉及列之间的匹配。
  • merge 用于基于一个或多个键对不同 DataFrame 中的行进行连接,类似于 SQL 中的 join 操作。
  • merge 固定两个连接对象; 两个obj不用列表
  • concat 不限制链接对象,objs要用列表

在选择使用哪种方法时,要考虑你的数据合并需求,如果只是简单的拼接,可以使用 concat;如果需要基于某一列或多列进行合并,则应使用 merge

pd.concat  的 axis参数

  • axis=0:沿着行的方向进行连接,即将多个 DataFrame 沿着纵向方向堆叠。

  • axis=1:沿着列的方向进行连接,即将多个 DataFrame 沿着横向方向拼接。

按行合并值即行数不变

titanic.Embarked.dropna().mode().values

  • titanic.Embarked.dropna():首先从 "titanic" 数据集中选择 "Embarked" 列,并使用 dropna() 方法删除该列中的缺失值(NaN)。

  • .mode():接着使用 mode() 方法,该方法用于计算数据中的众数(即出现频率最高的值),这里是计算经过删除缺失值后的 "Embarked" 列的众数。

  • .values:最后使用 values 属性,将计算出的众数以数组的形式返回。

head : Series  /  DataFrame   

两种obj均可使用head(), tail()等函数

& 来代替 and

下代码有啥错误

male_age = titanic.loc[titanic.Sex=="male" and titanic.Age.notnull(), "age"].mean()

改正后

male_age = titanic.loc[(titanic.Sex == "male") & (titanic.Age.notnull()), "Age"].mean()

Pandas 为条件过滤提供了矢量化操作,需要使用位操作符 & 来代替 and,并且每个条件都需要用括号括起来

loc 与 fillna(inplace=True)

titanic.loc[titanic.Sex=="male", "Age"].fillna(male_age, inplace=True)

上述代码不会改变titanic本身

改正:将fillna参数inplace改为False, 即可改变titanic本身

解释:

loc 返回的是原始数据的视图(view),而不是副本(copy)。这意味着对返回的视图所做的更改会反映在原始数据上。但是,当使用 fillna 方法时,情况稍有不同。

当你通过 loc 使用索引器来选择特定的行和列时,返回的是一个视图。但是,如果你对这个视图调用 fillna 并设置 inplace=True,它可能会在临时的 Series 对象上进行填充,而不是修改原始 DataFrame。

正确代码

titanic.loc[titanic.Sex == "male", "Age"] = age_view.fillna(30)

value_counts()

titanic.Survived.value_counts()

返回值

Survived
0    815
1    494
Name: count, dtype: int64

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值