您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch |

自学教程:Python

51自学网 2022-07-22 18:47:56
  python
这篇教程Python写得很实用,希望能帮到您。

前言

在pandas模块中,通常我们都需要对类型为DataFrame的数据进行操作,其中最为常见的操作便是拼接了。比如我们将两个Excel表格中的数据读入,随后拼接完成后保存进一个新的Excel表格文件中。之前查找了相关的博客, 发现网络上鱼龙混杂。有些代码完全无法执行,为了提高效率,这里做一个详细地记录。

DataFrame数据拼接方法一:使用.append()方法。

# -*- coding:utf-8 -*-import pandas as pddf1 = 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  10  1  21  3  4df2的值为:   0  10  5  61  7  8df的值为:   0  10  1  21  3  40  5  61  7  8"""

我们可以看到,首先我们使用了类似于list列表的操作方式,使用.append()方法对df1与df2数据进行了操作,但是需要注意的是,不同于对列表对象的操作,这里的df1仍旧为原来的df1所拥有的内容,而我们赋值的对象df才是保存了二者拼接以后的结果。 所以记得一定要单独执行赋值才可以得到正确的结果!!!其次我们看到结果其实是有些问题的,df结果中的纵向索引值为0,1,0,1,仍旧保留了我们拼接前各自的索引值,这是不被我们需要的,因此我们需要设置 ignore_index=True来对索引值进行重新排列。代码如下:

# -*- coding:utf-8 -*-import pandas as pddf1 = 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  10  1  21  3  4df2的值为:   0  10  5  61  7  8df的值为:   0  10  1  21  3  42  5  63  7  8"""

我们可以看到,此时的纵向索引值变正常了。

注意: df1 = pd.DataFrame([[1, 2], [3, 4]])创建DataFrame类型的数据时要使用双层中括号,单层中括号会导致数据纵向排列。

DataFrame数据拼接方法二:使用.concat()方法。

# -*- coding:utf-8 -*-import pandas as pddf1 = 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  10  1  21  3  4df2的值为:   0  10  5  61  7  8df的值为:   0  10  1  21  3  42  5  63  7  8"""

我们可以看到成功实现了拼接。

但是这样并不美观,我们发现,我们的纵向index还是用0,1在表示,那么我们可不可以自定义纵向index呢?答案是可以的,请看如下代码:

import pandas as pddf1 = 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  column20        1        21        3        4df2的值为:   column1  column20        5        61        7        8df的值为:   column1  column20        1        21        3        42        5        63        7        8"""

至此,DataFrame的拼接问题暂时告一段落,当然还存在其他方法,以后有机会了再补充,这两种方法均为比较直观和简洁的方法。推荐使用。此外, pd.concat()函数也适用于多个DataFrame的拼接, 只要将第一个参数变为一个列表,涵盖所有的DataFrame名称即可,如[df1, df2, df3]。

补充:Python同时合并多个DataFrame

pandas的merge函数只能同时合并三个dataframe,如果涉及到合并多个dataframe就比较麻烦

这种情况下我们可以创建一个我们需要合并的列表,然后将他们一次性合并在一起

# merge any number of dataframesfrom functools import reducedf_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()

总结

到此这篇关于Python pandas DataFrame数据拼接的文章就介绍到这了,更多相关pandas DataFrame拼接内容请搜索wanshiok.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持wanshiok.com!


一文教你将Visual Studio Code变成Python开发神器
Pycharm中运行程序在Python
51自学网,即我要自学网,自学EXCEL、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。
京ICP备13026421号-1