如何检查一个文件的每一行是否在另一个文件Python

时间:2018-06-08 13:41:36

标签: python pandas

文件1:

2018-06-07, AAA, 26543.0, 123, 0.0
2018-06-07, AAA, 26512.0, 123, 1.0

file2的:

20180608, B, 12345, 343, 0
20180607, AAA, 26512, 123, 1
20180608, C, 123, 343, 0
20180607, AAA, 26543, 123, 0

现在,我可以找到一种方法,对于file1中的每一行,我只是处理它并尝试在file2中找到匹配的行。但是,这个解决方案可能会遇到一些问题,因为我们处理的是相对较大的数据,这种方法(算法)可能会非常慢。

  1. 我想知道是否有一些Python内置库可以让我轻松地检查这个,比如Pandas ......(注意:数据格式,第二个和最后一个字段的类型不同,但数据是相同)
  2. 如果没有图书馆允许我直接做这些东西,是否有一些更好的算法可以让我实现目标? 谢谢

1 个答案:

答案 0 :(得分:0)

根据您import UIKit import CoreBluetooth class ViewController: UIViewController,CBCentralManagerDelegate { var centralManager:CBCentralManager! override func viewDidLoad() { super.viewDidLoad() self.centralManager = CBCentralManager(delegate: self, queue: .main) } func centralManagerDidUpdateState(_ central: CBCentralManager) { switch central.state { case .poweredOn: print("Powerd On State ") let options: [String: Any] = [CBCentralManagerScanOptionAllowDuplicatesKey: NSNumber(value: false)] self.centralManager.scanForPeripherals(withServices: nil, options: options) case .poweredOff: print("Power on the Bluetooth") default: print("Something went wrong!") break } } func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) { print("Peripheral Discovered: ",peripheral.name ?? "Nil") } } 的大小以及您想要的大小,您可以选择一些选项。

首先,使用DataFrame将日期设置为相同的格式。还要确保每个pd.to_datetime

中的列名称相同
df

import pandas as pd df1['date'] = pd.to_datetime(df1['date']) df2['date'] = pd.to_datetime(df2['date'], format='%Y%m%d') print(df1) date val1 val2 val3 val4 0 2018-06-07 AAA 26543.0 123 0.0 1 2018-06-07 AAA 26512.0 123 1.0 print(df2) date val1 val2 val3 val4 0 2018-06-08 B 12345 343 0 1 2018-06-07 AAA 26512 123 1 2 2018-06-08 C 123 343 0 3 2018-06-07 AAA 26543 123 0

您可以使用pd.merge参数执行outer合并,然后告诉您哪些行与哪个indicator对应。

DataFrame

输出:

pd.merge(df1, df2, how='outer', indicator=True)

前两行显示在 date val1 val2 val3 val4 _merge 0 2018-06-07 AAA 26543.0 123 0.0 both 1 2018-06-07 AAA 26512.0 123 1.0 both 2 2018-06-08 B 12345.0 343 0.0 right_only 3 2018-06-08 C 123.0 343 0.0 right_only df1中,而后两行仅显示在df2中。如果您只关心共享行,那么只需使用df2合并。

inner

pd.merge(df1, df2, how='inner') date val1 val2 val3 val4 0 2018-06-07 AAA 26543 123 0 1 2018-06-07 AAA 26512 123 1

如果duplicateddf1不包含任何重复的行,那么您也可以只连接两个,然后在连接的df2中查找重复的行,以查看两者之间共享的行帧。

df

输出:

df = pd.concat([df1, df2])
df[df.duplicated()]