潜江网站建设,应聘软件开发工程师简历,自己做广告用什么软件,网页设置快捷键文章目录 1.3 增加#xff0c;删除与合并数据1.3.1 增加数据1.3.2 删除数据1.3.3 合并数据 1.3 增加#xff0c;删除与合并数据
1.3.1 增加数据
在原数据末尾增加一列时#xff0c;语法为 df[‘新列名] 某个值或某个元素个数与 DataFrame 列数相同的列表#xff0c;例如… 文章目录 1.3 增加删除与合并数据1.3.1 增加数据1.3.2 删除数据1.3.3 合并数据 1.3 增加删除与合并数据
1.3.1 增加数据
在原数据末尾增加一列时语法为 df[‘新列名] 某个值或某个元素个数与 DataFrame 列数相同的列表例如
df pd.DataFrame({姓名:[张三, 李四, 王五], 统计学: [95, 100, 88], 高数: [82, 90, 88], 英语: [84, 89, 78]})
df[计算机] [92, 69, 75] # 增加一列计算机课程的成绩
df姓名统计学高数英语计算机0张三958284921赵四1009089692王五88887875
在原数据末尾增加一行数据时比较简单的方式是用 loc 函数df.loc[行索引] 新行值。
df.loc[3] [马六, 65, 70, 69, 55] # 在末尾增加一行数据
df姓名统计学高数英语计算机0张三958284921赵四1009089692王五888878753马六65706955
若要在指定位置插入列则需要用到 insert 函数。
df.insert(1, 运筹学, [61, 72, 84, 81]) # 在第 1 列后面插入新的一列
df姓名运筹学统计学高数英语计算机0张三61958284921赵四721009089692王五84888878753马六8165706955
df.insert(3, Python, [81, 76, 74, 71]) # 在第 4 列后面插入新的一列
df姓名运筹学统计学Python高数英语计算机0张三6195818284921赵四72100769089692王五8488748878753马六816571706955
若要在指定位置插入行目前 Pandas 还没有专门的函数一般采用concat函数合并多个 DataFrame 的方式增加多列或多行数据也可以使用 concat函数或merge函数具体参看后面的合并数据章节。
1.3.2 删除数据
Pandas 可以利用drop函数删除行数据或列数据。删除一行时参数为行标签名以及inplace True。若没有参数inplace True原始的 DataFrame 数据不变。
df.drop(3, inplace True) # 删除第 3 行
df姓名运筹学统计学Python高数英语计算机0张三6195818284921赵四72100769089692王五848874887875
删除一列时多了一个参数axis 1
df.drop(英语, inplace True, axis 1)
df姓名运筹学统计学Python高数计算机0张三61958182921赵四721007690692王五8488748875
df.drop([运筹学, 高数], inplace True, axis 1) # 删除两行
df姓名统计学Python计算机0张三9581921赵四10076692王五887475
1.3.3 合并数据
Pandas 中比较常用的两个合并数据的方法是concat与merge。 当两个 DataFrame 数据表具有完全相同的列标签时一般用concat其他情况下多用merge。
df1 pd.DataFrame({姓名: [张三, 李四, 王五], 统计学: [85, 68, 90], 高数: [82, 63, 88], 英语: [84, 90, 78]})
df1姓名统计学高数英语0张三8582841李四6863902王五908878
df2 pd.DataFrame({姓名: [马大帅, 陈小虎], 统计学: [83, 59], 高数: [92, 70], 英语: [94, 78]})
df2姓名统计学高数英语0马大帅8392941陈小虎597078
两张表具有完全相同的行名用concat合并的代码如下
pd.concat([df1, df2]) # 注意中括号不等丢姓名统计学高数英语0张三8582841李四6863902王五9088780马大帅8392941陈小虎597078
若要合并后的 index 重新命名可以加参数ignore_index True让合并后数据的 index 重新从小到大命名
pd.concat([df1, df2], ignore_index True)姓名统计学高数英语0张三8582841李四6863902王五9088783马大帅8392944陈小虎597078
假如有下面的数据
df3 pd.DataFrame({姓名: [张三, 李四, 王五], 会计: [75, 78, 80], 管理学: [94, 96, 88]})
df3姓名会计管理学0张三75941李四78962王五8088
df1 与 df3 的姓名相同但列名不完全相同。我们想把 df3 的列添加到 df1 中此时就要使用merge方法了它的使用语法一般如下
DataFrame.merge(right, howinner, onNone)right需要合并的另一个 DataFrame 数据how默认为 inner表示内连接取两个数据表中匹配字段的交集进行合并outer表示外连接取两个数据表中匹配字段的并集进行合并left表示左连接取左边数据表中匹配字段进行合并right表示右连接取右边数据表中匹配字段进行合并on匹配的字段列可以是一个或多个
因此对于 df1 与 df3用merge合并时匹配的字段列名为’姓名’
df1.merge(df3, on 姓名)姓名统计学高数英语会计管理学0张三85828475941李四68639078962王五9088788088
merge也能实现concat的合并效果例如合并 df1 与 df2
df1.merge(df2, on [姓名, 统计学, 高数, 英语], how outer)姓名统计学高数英语0张三8582841李四6863902王五9088783马大帅8392944陈小虎597078
在上面的代码中匹配的字段为所有的列连接方式为外连接实现结果与concat相同。若连接方式为其他类型显示效果如下
df1.merge(df2, on [姓名, 统计学, 高数, 英语], how inner) # 内连接时两个数据表匹配字段的交集为空姓名统计学高数英语
df1.merge(df2, on [姓名, 统计学, 高数, 英语], how left) # 左连接时保留左数据表的所有匹配字段姓名统计学高数英语0张三8582841李四6863902王五908878
df1.merge(df2, on [姓名, 统计学, 高数, 英语], how right) # 右连接时保留右数据表的所有匹配字段姓名统计学高数英语0马大帅8392941陈小虎597078
在合并数据表时若某些字段没有对应数据Pandas 会自动用 NaN 替代下面的例子展示了不同连接方式的效果。
df1 pd.DataFrame({班级: [一班, 二班, 一班], 姓名: [张三, 李四, 王五], 性别: [男, 男, 女], 籍贯: [北京, 上海, 重庆]})
df1班级姓名性别籍贯0一班张三男北京1二班李四男上海2一班王五女重庆
df2 pd.DataFrame({ 姓名: [张三, 陈小虎], 统计学: [85, 59]})
df2姓名统计学0张三851陈小虎59
df1.merge(df2, on 姓名)班级姓名性别籍贯统计学0一班张三男北京85
df1.merge(df2, on 姓名, how outer) # 某些字段没有对应数据则显示为 NaN班级姓名性别籍贯统计学0一班张三男北京85.01二班李四男上海NaN2一班王五女重庆NaN3NaN陈小虎NaNNaN59.0
df1.merge(df2, on 姓名, how left)班级姓名性别籍贯统计学0一班张三男北京85.01二班李四男上海NaN2一班王五女重庆NaN
df1.merge(df2, on 姓名, how right)班级姓名性别籍贯统计学0一班张三男北京851NaN陈小虎NaNNaN59