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
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » python数据分析与机械学习--项目笔记
发表评论 取消回复