ich ziemlich neu bin auf der Programmierung und will dieses Programm codieren, die die gemeinsame Spalten zwischen file1.csv
und file2.csv
Wie die „Common“ Spalt zwischen zwei CSV-Dateien übertragen
Eingang übertragen:
file1.csv
Aussehen dies wie:
ID,Nickname,Gender,SubjectPrefix,SubjectFirstName,Whatever1A,Whaterver2A,SubjectLastName
1,J.,M,Dr.,Jason,,,Allan
2,B.,M,Mr.,Brian,,,Welch
file2.csv
sieht wie folgt aus:
nickname,gender,city,id,prefix_name,first_name,Whatever1B,last_name,Whatever2B,Whatever3B,Whatever4B
Problem:
Wie der Header file1.csv
und file1.csv
zu vergleichen, sie zu identifizieren und übertragen dann die "gemeinsame" Spalten dazwischen. Die „gemeinsame“ Spalten sind diejenigen, die ähnliche Namenskonvention haben (dh ID
und id
,Nickname
und nickname
), oder diejenigen, die die gleiche Namenskonvention nicht unbedingt haben, aber die gleichen Daten speichere, (dh SubjectPrefix
und prefix_name
,SubjectFirstName
und first_name
).
Ausgang:
Die Ausgabe wie folgt sein sollte.
Hinweis: die übertragenen Spalten
"id"
,"nickname"
und"gender"
sind diejenigen mit ähnlichen Namensgebung zwischenfile1.csv
undfile2.csv
Header. Und die Spalten"prefix_name"
und"first_name"
sind die entsprechenden"SubjectPrefix"
bzw."SubjectFirstName"
.id,nickname,gender,prefix_name,first_name,last_name 1,J.,M,Dr.,Jason,Allan 2,B.,M,Mr.,Brian,Welch
habe ich versucht, diesen Code:
import csv
import collections
csv_file1 = "file1.csv"
csv_file2 = "file2.csv"
data1 = list(csv.reader(file(csv_file1,'r')))
data2 = list(csv.reader(file(csv_file2,'r')))
file1_header = data1[0][:] #get the header from file1
file2_header = data2[0][:] #get the header from file2
lowered_file1_header = [item.lower() for item in file1_header] #lowercase file1 header
lowered_file2_header = [item.lower() for item in file2_header] #lowercase file2 header anyways
col_index_dict = {}
for column in lowered_file1_header:
if column == "subjectprefix": # identify "subjectprefix" column in file1.csv
col_index_dict[column] = lowered_file1_header.index(column)
elif column == "subjectfirstname": # identify "subjectfirstname" column in file1.csv
col_index_dict[column] = lowered_file1_header.index(column)
elif column in file2_header: # identify the columns with same naming
col_index_dict[column] = lowered_file1_header.index(column)
else:
col_index_dict[column] = -1 # mark the not matching columns
# Build header
output = [col_index_dict.keys()]
is_header = True
for row in data1:
if is_header is False:
rowData = []
for column in col_index_dict:
column_index = col_index_dict[column]
if column_index != -1:
rowData.append(row[column_index])
else:
rowData.append('')
output.append(rowData)
else:
is_header = False
print(output)
Jede Idee, wie, wie dieses Problem zu lösen?
Hier sehen Sie nach Ideen ... Set (Liste (x) wird nicht benötigt ... Erfahren Sie mehr über Pandas-Filterung mit "Isin". Https://people.duke.edu/~ccc14/sta-663/ EinführungToPythonSolutions.html – Merlin