Zum Inhalt springen
  • YouTube
  • FaceBook
  • Twitter
  • Instagram

Datenanalyse Irland

Datenanalyse und Videoanleitungen

  • Startseite
  • Kontakt
  • Über uns
    • Neueste
    • Schreiben Sie für uns
    • Erfahren Sie mehr Informationen über unsere Website
  • Nützliche Links
  • Glossar
  • Alle Kategorien
  • Faq
  • Livestream
  • Suchformular umschalten
  • wie man mit SQL alle Datensätze auswählt SQL
  • Was ist der Unterschied zwischen DROP und TRUNCATE in SQL? SQL
  • Wie man Python-Validierung von Javascript ausführt Javascript
  • String-Manipulation in Python Python-Methode
  • Wie man die Funktion zip() in Python verwendet Python
  • YouTube-Kanallisten - Python Datenbereinigung Python Datenbereinigung
  • Was bewirkt der Operator ... in Julia? julia
  • wie man Case-Anweisungen in SQL verwendet SQL

Wie man in Python prozentuale Unterschiede zwischen Dateien anzeigt

Verfasst am Januar 16, 2022Juni 14, 2022 Von admin

Geschätzte Lesezeit: 5 Minuten

In unserem vorherigen Beitrag über den Vergleich von CSV-Dateien auf Unterschiede haben wir gezeigt, wie Sie die Unterschiede sehen können. Was aber, wenn Sie sehen möchten, ob ein Datensatz zu 100 % übereinstimmt oder nicht?

Hier werden wir SequenceMatcher verwenden, eine Python-Klasse, mit der Sie Dateien vergleichen und eine prozentuale Übereinstimmung zurückgeben können.

Schauen wir uns den Code an

Importieren Sie Anweisungen und lesen Sie die CSV-Dateien ein. Hier importieren wir wie üblich die benötigten Bibliotheken und lesen die beiden CSV-Dateien ein, die wir verwenden:

Beachten Sie, dass wir hier auch die Einstellungen für den Datenrahmen festlegen, damit wir den Datenrahmen richtig sehen können. Siehe weiter unten.

import pandas as pd
import numpy as np
import math
from difflib import SequenceMatcher
pd.set_option('max_columns', None)
pd.set_option('display.width', None)


#Read in the CSV files
df1 = pd.read_csv('CSV1.csv')
df2 = pd.read_csv('CSV2.csv')

Die beiden CSV-Dateien sehen wie folgt aus:

CSV1

CSV2

Als Nächstes werden wir ein Array erstellen. Durch die Erstellung eines Arrays kann der Vergleich abgeschlossen werden, da Indizes erstellt werden, und die Indizes in jedem Array können verglichen und dann die prozentuale Differenz berechnet werden.

#Create an array for both dataframes
array1 = np.array(df1)
array2 = np.array(df2)

Unser nächster Schritt besteht darin, die Arrays in einen Datenrahmen zu übertragen, alle Integer-Werte in eine Zeichenkette zu ändern und dann beide Datenrahmen zu einem zusammenzufügen.

In diesem Fall ermöglicht die Umwandlung der Werte in eine Zeichenkette, dass über diese Werte iteriert werden kann, andernfalls wird der Fehler " TypeError: 'int' object is not iterable" angezeigt.

#Transfer the arrays to a dataframe
df_CSV_1 = pd.DataFrame(array1, columns=['No1','Film1','Year1','Length1'])
df_CSV_2 = pd.DataFrame(array2, columns=['No2','Film2','Year2','Length2'])

#Change all the values to a string, as numbers cannot be iterated over.
df_CSV_1['Year1'] = df_CSV_1['Year1'].astype('str')
df_CSV_2['Year2'] = df_CSV_2['Year2'].astype('str')
df_CSV_1['Length1'] = df_CSV_1['Length1'].astype('str')
df_CSV_2['Length2'] = df_CSV_2['Length2'].astype('str')

#join the dataframes
df = pd.concat([df_CSV_1,df_CSV_2], axis=1)

Wir gehen jetzt zum Hauptteil des Programms über, der uns die Antworten liefert, die wir brauchen. Hier erstellen wir eine Funktion, die die Berechnungen für uns durchführt:

#Create a function to calculate the differences and show as a ratio.
def create_ratio(df, columna, columnb):
    return SequenceMatcher(None,df[columna],df[columnb]).ratio()

Als nächstes berechnen wir die Differenzen und formatieren die Ausgabe

#Here we use apply which will pull in the data that needs to be passed to the fuction above.
df['Film_comp'] = df.apply(create_ratio,args=('Film1','Film2'),axis=1)
df['Year_comp'] = df.apply(create_ratio,args=('Year1','Year2'),axis=1)
df['Length_comp'] = df.apply(create_ratio,args=('Length1','Length2'),axis=1)

#This creates the values we are looking for
df['Film_comp'] = round(df['Film_comp'].astype('float'),2)*100
df['Year_comp'] = round(df['Year_comp'].astype('float'),2)*100
df['Length_comp'] = round(df['Length_comp'].astype('float'),2)*100

#this removes the decimal point that is added as a result of using the datatype 'Float'
df['Film_comp'] = df['Film_comp'].astype('int')
df['Year_comp'] = df['Year_comp'].astype('int')
df['Length_comp'] = df['Length_comp'].astype('int')
#Print the output
print(df)

Und die endgültige Ausgabe sieht so aus:

Eine Erläuterung der Ausgabe

Wie man sieht, sind die letzten drei Spalten die Prozentsätze der erzielten Übereinstimmung, wobei 100 eine exakte Übereinstimmung bedeutet.

Für den Indexwert 1 gibt es Joker in der ersten Datei, aber Jokers ist in der zweiten Datei.

Das Verhältnis wird wie folgt berechnet:

Joker ist Länge 5, Joker ist Länge 6 = 11 Zeichen lang

Die Logik sieht sich also die Sequenz an, iteriert durch die Sequenz und stellt fest, dass die ersten 10 Zeichen in der gleichen Reihenfolge sind, aber das 11:

(10/11) * 100 = 90.90

Schließlich setzt die Rundungsfunktion den gesuchten Wert auf 91.

Auf der gleichen Linie werden wir das Jahr vergleichen:

2019 und 2008 bestehen aus insgesamt acht Zeichen.

In der Reihenfolge stimmen die ersten beiden überein, und da sie auch gefunden werden, ergeben sich vier, und das Verhältnis ist wie folgt:

4/8 *100 = 50

Für Index 20 haben wir auch den Filmnamen verglichen, insgesamt sind es 17 Zeichen, aber das Programm ignoriert das, was es Junk nennt, also das Leerzeichen wird nicht mitgerechnet, deshalb wird das Verhältnis erst ab 16 Zeichen berechnet.

Um dies besser verstehen zu können, habe ich die folgenden Informationen zusammengestellt:

Index 1Index 1
201920088JokerJoker11
2Korrekter Punkt1JKorrekter Punkt1
0Korrekter Punkt1oKorrekter Punkt1
1Falsche Stelle0KKorrekter Punkt1
9Falsche Stelle0eKorrekter Punkt1
rKorrekter Punkt1
2Gefunden1JGefunden1
0Gefunden1oGefunden1
1Gefunden0KGefunden1
9Gefunden0eGefunden1
rGefunden1
Insgesamt im Vergleich8Insgesamt im Vergleich11
Ratio0.50Ratio0.91
Index 20
Der DreckDie Schmutzige16
TKorrekter Punkt1
HKorrekter Punkt1
EKorrekter Punkt1
Korrekter Punkt1
TGefunden1
HGefunden1
EGefunden1
DKorrekter Punkt1
IKorrekter Punkt1
RKorrekter Punkt1
TKorrekter Punkt1
DGefunden1
IGefunden1
RGefunden1
TGefunden1
Insgesamt im Vergleich16
Ratio0.94

CSV, numpy, Python, Python im Umgang mit Dateien, SequenceMatcher Tags:CSV-Dateien vergleichen, python vergleichen CSV-Dateien, Sequenzabgleicher, CSV validieren

Nach der Navigation

Vorheriger Beitrag: Wie man eine Javascript-Variable mit JSON an Python übergibt
Nächster Beitrag: Was ist ein Array in Python?

Verwandte Beiträge

  • Wie man die Funktion zip() in Python verwendet Python
  • python konstruktor selbst und __init__erläutert Python
  • wie man Diagramme in Tkinter erstellt Python
  • wie man Sinus und Kosinus in Python-Code addiert numpy
  • Wie man mit Python eine XML-Datei aus Excel erstellt Python
  • TypeError: 'list'-Objekt ist kein Iterator Python

Wählen Sie Ihre Sprache!

  • English
  • हिंदी
  • Español
  • Português
  • Français
  • Italiano
  • TypeError: 'list'-Objekt ist kein Iterator Python
  • Wie man unerwünschte Zeichen entfernt Python Datenbereinigung
  • R tutorial - Wie man mit rstudio Listen sortiert R-Programmierung
  • Rekursion Definition
  • ValueError: Muster enthält keine Erfassungsgruppen Wert-Fehler
  • Was sind die eingebauten Ausnahmen in Julia? Julia-Programmierung
  • String-Manipulation in Python Python-Methode
  • R - Wie man eine Datei öffnet R-Programmierung

Copyright © 2023 Datenanalyse Irland.

Angetrieben von PressBook Premium Thema

Diese Website verwendet Cookies, um Ihr Erlebnis zu verbessern. Wir gehen davon aus, dass Sie damit einverstanden sind, aber Sie können sich auch dagegen entscheiden, wenn Sie es wünschen. Cookie-EinstellungenAKZEPTIEREN
Datenschutz & Cookies Politik

Überblick über den Datenschutz

Diese Website verwendet Cookies, um Ihre Erfahrung zu verbessern, während Sie durch die Website navigieren. Von diesen Cookies werden die Cookies, die als notwendig eingestuft werden, in Ihrem Browser gespeichert, da sie für das Funktionieren der grundlegenden Funktionen der Website unerlässlich sind. Wir verwenden auch Cookies von Dritten, die uns helfen zu analysieren und zu verstehen, wie Sie diese Website nutzen. Diese Cookies werden nur mit Ihrer Zustimmung in Ihrem Browser gespeichert. Sie haben auch die Möglichkeit, diese Cookies abzulehnen. Das Ablehnen einiger dieser Cookies kann jedoch Auswirkungen auf Ihr Surferlebnis haben.
Erforderlich
Immer Aktiviert
Notwendige Cookies sind für das ordnungsgemäße Funktionieren der Website unbedingt erforderlich. Zu dieser Kategorie gehören nur Cookies, die grundlegende Funktionalitäten und Sicherheitsmerkmale der Website gewährleisten. Diese Cookies speichern keine persönlichen Informationen.
Nicht erforderlich
Alle Cookies, die für das Funktionieren der Website nicht unbedingt erforderlich sind und speziell zur Sammlung personenbezogener Daten der Nutzer über Analysen, Anzeigen oder andere eingebettete Inhalte verwendet werden, werden als nicht erforderliche Cookies bezeichnet. Es ist zwingend erforderlich, die Zustimmung der Nutzer einzuholen, bevor Sie diese Cookies auf Ihrer Website einsetzen.
SPEICHERN & ANNEHMEN