Python pandas DataFrame数据拼接方法
作者:勤奋的大熊猫 发布时间:2022-11-08 08:09:36
前言
在pandas模块中,通常我们都需要对类型为DataFrame的数据进行操作,其中最为常见的操作便是拼接了。比如我们将两个Excel表格中的数据读入,随后拼接完成后保存进一个新的Excel表格文件中。之前查找了相关的博客, 发现网络上鱼龙混杂。有些代码完全无法执行,为了提高效率,这里做一个详细地记录。
DataFrame数据拼接方法一:使用.append()方法。
# -*- coding:utf-8 -*-
import pandas as pd
df1 = pd.DataFrame([[1, 2], [3, 4]])
df2 = pd.DataFrame([[5, 6], [7, 8]])
df = df1.append(df2)
print("df1的值为:")
print(df1)
print("df2的值为:")
print(df2)
print("df的值为:")
print(df)
"""
运行结果:
df1的值为:
0 1
0 1 2
1 3 4
df2的值为:
0 1
0 5 6
1 7 8
df的值为:
0 1
0 1 2
1 3 4
0 5 6
1 7 8
"""
我们可以看到,首先我们使用了类似于list列表的操作方式,使用.append()方法对df1与df2数据进行了操作,但是需要注意的是,不同于对列表对象的操作,这里的df1仍旧为原来的df1所拥有的内容,而我们赋值的对象df才是保存了二者拼接以后的结果。 所以记得一定要单独执行赋值才可以得到正确的结果!!!其次我们看到结果其实是有些问题的,df结果中的纵向索引值为0,1,0,1,仍旧保留了我们拼接前各自的索引值,这是不被我们需要的,因此我们需要设置 ignore_index=True来对索引值进行重新排列。代码如下:
# -*- coding:utf-8 -*-
import pandas as pd
df1 = pd.DataFrame([[1, 2], [3, 4]])
df2 = pd.DataFrame([[5, 6], [7, 8]])
df = df1.append(df2, ignore_index=True)
print("df1的值为:")
print(df1)
print("df2的值为:")
print(df2)
print("df的值为:")
print(df)
"""
运行结果:
df1的值为:
0 1
0 1 2
1 3 4
df2的值为:
0 1
0 5 6
1 7 8
df的值为:
0 1
0 1 2
1 3 4
2 5 6
3 7 8
"""
我们可以看到,此时的纵向索引值变正常了。
注意: df1 = pd.DataFrame([[1, 2], [3, 4]])
创建DataFrame类型的数据时要使用双层中括号,单层中括号会导致数据纵向排列。
DataFrame数据拼接方法二:使用.concat()方法。
# -*- coding:utf-8 -*-
import pandas as pd
df1 = pd.DataFrame([[1, 2], [3, 4]])
df2 = pd.DataFrame([[5, 6], [7, 8]])
df = pd.concat([df1, df2], ignore_index=True)
print("df1的值为:")
print(df1)
print("df2的值为:")
print(df2)
print("df的值为:")
print(df)
"""
运行结果:
df1的值为:
0 1
0 1 2
1 3 4
df2的值为:
0 1
0 5 6
1 7 8
df的值为:
0 1
0 1 2
1 3 4
2 5 6
3 7 8
"""
我们可以看到成功实现了拼接。
但是这样并不美观,我们发现,我们的纵向index还是用0,1在表示,那么我们可不可以自定义纵向index呢?答案是可以的,请看如下代码:
import pandas as pd
df1 = pd.DataFrame([[1, 2], [3, 4]], columns=["column1", "column2"])
df2 = pd.DataFrame([[5, 6], [7, 8]], columns=["column1", "column2"])
df = pd.concat([df1, df2], ignore_index=True)
print("df1的值为:")
print(df1)
print("df2的值为:")
print(df2)
print("df的值为:")
print(df)
"""
运行结果:
df1的值为:
column1 column2
0 1 2
1 3 4
df2的值为:
column1 column2
0 5 6
1 7 8
df的值为:
column1 column2
0 1 2
1 3 4
2 5 6
3 7 8
"""
至此,DataFrame的拼接问题暂时告一段落,当然还存在其他方法,以后有机会了再补充,这两种方法均为比较直观和简洁的方法。推荐使用。此外, pd.concat()函数也适用于多个DataFrame的拼接, 只要将第一个参数变为一个列表,涵盖所有的DataFrame名称即可,如[df1, df2, df3]。
补充:Python同时合并多个DataFrame
pandas的merge函数只能同时合并三个dataframe,如果涉及到合并多个dataframe就比较麻烦
这种情况下我们可以创建一个我们需要合并的列表,然后将他们一次性合并在一起
# merge any number of dataframes
from functools import reduce
df_groups = [df2, group1, group2, group3, group4, group5, group6, group7, group8]
df_merged = reduce(lambda left, right: pd.merge(left, right, on=['title']), df_groups)
df_merged.head()
来源:https://blog.csdn.net/u011699626/article/details/116406070
猜你喜欢
- 目录项目地址运行环境运行方法数据爬取(jd.comment.py)模型训练(train.py)情感分析(sentiment.analysis
- 本文的JS效果是在鼠标点击ITEM标签的时候,实现下方的内容跟随滚动切换的效果,我们先来看下运行后的效果图。以下是脚本之家原创的运行代码:&
- zip文件是我们经常使用的打包格式之一,python解压和压缩zip效率非凡。 python解压zip文档:#/usr/bin/python
- session请求过程当第一次访问网站时,Seesion_start()函数就会创建一个唯一的Session ID,并自动通过HTTP的响应
- 年初的时候收藏过一篇关于mysqlreport的报表解读,和内置的show status,和show variables相比mysqlrep
- HTML是万维网上发布超文本的通用语言[1]。从1982年Tim Berners-Lee简化SGML建立HTML的原始定义到2001年发布X
- 在html里的每一个标签都有其自身的意义,而H标签作为标题标签,它的意义更是至关重要。对于H标签的用法特别是h1的用法一直是个争议的问题,也
- 今天,本文向大家推荐20佳国外的脚本下载网站。1- Hot Scripts2- Code Canyon3- User Scripts4- S
- 如下所示:#-*- coding: utf-8 -*-import pandas as pdimport numpy as npfrom p
- 下面就来介绍下SQL Server 2008中使用的端口有哪些:首先,最常用最常见的就是1433端口。这个是数据库引擎的端口,如果我们要远程
- Software as a service 软件即服务,21世纪开始兴起的一种完全创新的软件应用模式。客户通过互联网向厂商定购所需的应用软件
- 一.axisaxis就是指定轴。三维数组可看作元素是二维数组的一维数组,二维数组可看作元素是一维数组的一维数组 。(这么理解就舒服了!)例:
- 循环可以用来重复执行某条语句,直到某个条件得到满足或遍历所有元素。1 for循环是for循环,可以把集合数据类型list、tuple、dic
- 我就废话不多说了,大家还是直接看代码吧!import socketimport sysimport timeimport structHOS
- 简要讨论为什么它不提供++作为运算符 正常情况下,当有人问起++原因而不是Python中的运算符时,这一行引起了我的注意。如果您想知道最初的
- matplotlib简介matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地行
- Tuple 元组元组的定义和使用元组的定义:元组是有序的不可变对象集合元组使用小括号包围,各个对象之间使用逗号分隔元组是异构的,可以包含多种
- Pytorch 使用GPU训练使用 GPU 训练只需要在原来的代码中修改几处就可以了。我们有两种方式实现代码在 GPU 上进行训练方法一 .
- //创建组件 function createobj() { if (window.ActiveXObject) { return(new A
- 1、检测指定路径下所有文件所占用内存import osdef check_memory(path, style='M'):