Python-Pandas之两个Dataframe的比较(三)

25 篇文章 0 订阅
18 篇文章 3 订阅

昨天使用了 hashlib 库,今天直接使用 Dataframe 自带的函数去比较两个 df

一,使用 equals 函数对比:

import sys, sqlite3, pandas as pd

files = []
try:
    files = [sys.argv[1], sys.argv[2]]
except:
    print('命令行未检测到文件参数。')
# 这个方式可以通过命令行运行:
#   
#   python3 cmpfiles.py testfile1.txt testfile2.txt
# 
# 上面自带的两个参数,就是通过  sys.argv 获得的。

if len(files) == 0:
    files = ['./TempFiles/temp_77.csv', './TempFiles/temp_77_new.csv']
    # files = ['./TempFiles/temp_77.csv', './TempFiles/temp_77_copy.csv']
# 如果直接运行这个脚本,那么用西面定义的 files

df1 = pd.read_csv(files[0])
df2 = pd.read_csv(files[1])


# 使用 equals 比较两个数据框
try:
    df3 = df1.equals(df2)
    print('使用 df.equals 检测是否相同:', df3)
except Exception as err:
    print(err)

 

 

 

二,使用 any 对比:

mport sys, sqlite3, pandas as pd

files = []
try:
    files = [sys.argv[1], sys.argv[2]]
except:
    print('命令行未检测到文件参数。')
# 这个方式可以通过命令行运行:
#   
#   python3 cmpfiles.py testfile1.txt testfile2.txt
# 
# 上面自带的两个参数,就是通过  sys.argv 获得的。

if len(files) == 0:
    files = ['./TempFiles/temp_77.csv', './TempFiles/temp_77_new.csv']
    # files = ['./TempFiles/temp_77.csv', './TempFiles/temp_77_copy.csv']
# 如果直接运行这个脚本,那么用西面定义的 files

df1 = pd.read_csv(files[0])
df2 = pd.read_csv(files[1])


# 使用 any 比较两个数据框,只能使用相同行数的数据
try:
    df3 = (df1 != df2).any(axis=None)
    print('使用 df.any 检测是否相同:', df3 == False)
    df3 = (df1 != df2).any(1)
    ne_stacked = (df1 != df2).stack()
    changed = ne_stacked[ne_stacked]
    changed.index.names = ['行', '列']
    print('不相同的位置:')
    print(changed)
except Exception as err:
    print(err)

后面的 changed 是打印不同的地方,可以查看

 

 

三、使用 Eq 比较两个数据

import sys, sqlite3, pandas as pd

files = []
try:
    files = [sys.argv[1], sys.argv[2]]
except:
    print('命令行未检测到文件参数。')
# 这个方式可以通过命令行运行:
#   
#   python3 cmpfiles.py testfile1.txt testfile2.txt
# 
# 上面自带的两个参数,就是通过  sys.argv 获得的。

if len(files) == 0:
    files = ['./TempFiles/temp_77.csv', './TempFiles/temp_77_new.csv']
    # files = ['./TempFiles/temp_77.csv', './TempFiles/temp_77_copy.csv']
# 如果直接运行这个脚本,那么用西面定义的 files

df1 = pd.read_csv(files[0])
df2 = pd.read_csv(files[1])

# 使用 Eq 比较两个数据框
try:
    df3 = df1.eq(df2)
    print('使用 df.Eq 检测每一列是否相同:', False not in df3.all().values) # 如果每一列都相等,那么就都是 True
    df4 = df3.all(axis=0)
    df4 = pd.DataFrame(df4, columns=['列'])
    print('不相同的列位置:')
    print(df4[df4['列'] == False])
except Exception as err:
    print(err)

这个比较之后,是把每一列是否相等放到一个新的 Series 里面,然后看看是否包含 False

三个方法看情况用吧,如果需要知道详情,那就后面两种方法。

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: 要合并两个 Pandas DataFrame,可以使用 Pandas 的 merge() 函数。 merge() 函数将两个 DataFrame 按照指定的列连接在一起,可以指定连接方式(inner、outer、left、right),以及连接列的名称。例如,如果要按照列名为 "key" 的列将两个 DataFrame df1 和 df2 连接在一起,可以使用以下代码: ``` merged_df = pd.merge(df1, df2, on='key') ``` 这将返回一个新的 DataFrame,其中包含 df1 和 df2 中所有列,并且按照列名为 "key" 的列进行连接。 除了按照列名进行连接,还可以指定连接方式(inner、outer、left、right)、连接列的名称(可以指定多个列名)、连接的方式(连接、合并等)等。有关更多详细信息,请参阅 Pandas 的文档。 ### 回答2: pandas是一个强大的Python库,可以用于数据处理和分析。它提供了许多功能,其中之一就是可以将两个DataFrame合并在一起。 要合并两个DataFrame,可以使用pandas的merge函数。这个函数可以根据一列或多列的共同值将两个DataFrame进行合并。合并后的结果将包含两个DataFrame的所有列和共同值列的交集。 merge函数有几个重要的参数。其中,最重要的是on参数,它指定要根据哪些列进行合并。当两个DataFrame的共同列名相同时,可以直接使用on='列名'。如果共同列名不同,则可以使用left_on和right_on参数分别指定左右DataFrame的列名。默认情况下,merge函数会执行内连接,只保留在两个DataFrame中都存在的共同值。可以使用how参数指定不同的连接方式,如'left'(左连接),'right'(右连接),'outer'(外连接)等。 以下是一个示例,演示如何合并两个DataFrame: ```python import pandas as pd # 创建两个DataFrame df1 = pd.DataFrame({'A': [1, 2, 3], 'B': ['a', 'b', 'c']}) df2 = pd.DataFrame({'A': [1, 2, 4], 'C': ['x', 'y', 'z']}) # 合并DataFrame merged_df = pd.merge(df1, df2, on='A', how='inner') print(merged_df) ``` 运行上述代码,输出结果为: ``` A B C 0 1 a x 1 2 b y ``` 在这个示例中,我们创建了两个DataFrame df1和df2,它们都有一个共同的列A。使用merge函数,我们按照列A的共同值进行内连接,并将结果存储在merged_df中。输出结果中,列A的共同值1和2被保留,同时将df1和df2的其他列也合并在了一起。 通过使用pandas的merge函数,我们可以方便地合并两个DataFrame,并结合多个参数的灵活性,可以灵活地控制合并的方式和结果。 ### 回答3: Pandas是一个功能强大的数据处理库,可以方便地合并两个DataFrame。合并的方式主要有两种:纵向合并和横向合并。 纵向合并是指将两个数据集按行进行拼接,即将一个DataFrame追加到另一个DataFrame的下方形成一个更大的DataFrame。使用`concat()`函数可以实现这一操作。例如: ``` import pandas as pd # 创建两个DataFrame df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}) df2 = pd.DataFrame({'A': [7, 8, 9], 'B': [10, 11, 12]}) # 纵向合并两个DataFrame result = pd.concat([df1, df2]) print(result) ``` 横向合并是指将两个数据集按列进行拼接,即将一个DataFrame追加到另一个DataFrame的右侧形成一个更宽的DataFrame。使用`merge()`函数可以实现这一操作。例如: ``` import pandas as pd # 创建两个DataFrame df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}) df2 = pd.DataFrame({'C': [7, 8, 9], 'D': [10, 11, 12]}) # 横向合并两个DataFrame result = pd.merge(df1, df2, left_index=True, right_index=True) print(result) ``` 以上就是Pandas合并两个DataFrame的方法,根据具体的需求选择合适的合并方式,可以进行行拼接或者列拼接,从而实现数据集的整合和分析。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苏小败在路上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值