concat und merge

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Brando
User
Beiträge: 171
Registriert: Donnerstag 28. Januar 2016, 15:36

Angenommen ich habe drei Data sets, und ich möchte die ersten 15 Werte von set_1 anhand des Country Name columns wählen, und dann in set_2 und set_3 mit Country (ohne Name) columns abgleichen, und dabei die columns von set_1 teilweise abbilden, und die Treffer in set_2 und set_3 auch mit Teilen ihrer columns einbinden, so dass insgesamt 15 Werte entstehen, in denen ich dann den benutzten columns einen Namen gebe. Wie gehe ich vor?
einfachTobi
User
Beiträge: 491
Registriert: Mittwoch 13. November 2019, 08:38

Das klingt sehr verwirrend. Kannst du ein kurzes Beispiel mit vollständigen, echten Eingangsdaten und dem erwarteten Output zeigen?
Brando
User
Beiträge: 171
Registriert: Donnerstag 28. Januar 2016, 15:36

Hier definiere ich drei Dateienn GDP, ScimEn und Energy. Alle drei sollen gemerged werden, wobei die ersten 15 werte von ScimEn gefragt sind, und dann das Merge sich ausrichtet nach Country! GDP verwendet hier Country Name!
Hier der Code mit einigen Umbennungen und Probeausdrucken!

Code: Alles auswählen

import pandas as pd
import numpy as np
import re

Energy = pd.read_excel("assets/Energy Indicators.xls", names = ["A", "B", 'Country', 'Energy Supply', 'Energy Supply per Capita', '% Renewable'])
Energy = Energy[17:244]
# df.drop(['A', 'B'], axis= 1)
Energy = Energy.drop(columns=['A', 'B'])
for index, row in Energy.iterrows():
    if isinstance(row["Energy Supply"], int):
        row["Energy Supply"] =  (row["Energy Supply"] * 1000000.0)
        # print (type(row["Energy Supply"]))
        # print (row["Energy Supply"])
    if row["Country"] == "Republic of Korea":
        row["Country"] = "South Korea"
        # print (row["Country"])
    if  "United States of America" in row["Country"]:
        row["Country"] = "United States"
        # print (row["Country"])
    if "United Kingdom of Great Britain and Northern Ireland" in row["Country"]:
        row["Country"] = "United Kingdom"
        # print (row["Country"])
    if "China, Hong Kong Special Administrative Region" in row["Country"]:
        row["Country"] = "Hong Kong"
        # print (row["Country"])
    if re.search(r"([0-9-]+)", row["Country"]):
        row["Country"] = re.sub(r"[0-9]+","", row["Country"])
        print (row["Country"])

# print (Energy)
GDP = pd.read_csv("assets/world_bank.csv", sep=",", header= None)
GDP = GDP[4:274]
GDP.columns = GDP.iloc[0]
GDP = GDP.drop(GDP.index[0:1])
print ("")
print ("In world bank")for index, row in GDP.iterrows():
    if row["Country Name"] == "Korea, Rep.":
        row["Country Name"] = "South Korea"
        print (row["Country Name"])
        print ("South Korea renamed")
    if  "Iran, Islamic Rep." in row["Country Name"]:
        row["Country Name"] = "Iran"
        print (row["Country Name"])
    if "Hong Kong SAR, China" in row["Country Name"]:
        row["Country Name"] = "Hong Kong"
        print (row["Country Name"])
ScimEn = pd.read_excel("assets/scimagojr-3.xlsx")
ScimEn_reduced = ScimEn[0:15]
GDP_reduced = GDP[["Country Name", float("2006"), float("2007"), float("2008"), float("2009"), float("2010"), 
                   float("2011"), float("2012"), float("2013"), float("2014"), float("2015")]]
# GDP_reduced.drop(GDP_reduced.columns[[1]],
#        axis = 1,
#        inplace = True)
first_merge = pd.merge(ScimEn_reduced, Energy, on="Country")
second_merge = pd.merge(first_merge, GDP_reduced, left_on = "Country", right_on= "Country Name")
# second_merge= second_merge.drop(second_merge.columns[[0]], axis= 1)
# print (ScimEn_reduced)
# print (first_merge)
# print (GDP.columns)
# print (GDP_reduced["Country Name"])
if "South Africa" in GDP_reduced["Country Name"]:
    print ("Gefunden")
else:
    print("nicht gefunden")
print (GDP_reduced)
Benutzeravatar
__blackjack__
User
Beiträge: 13006
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Brando: Das sieht arg nach falscher Verwendung von `pandas` aus mit den Python-Schleifen über `iterrows()`. Und sind da die ``in``-Tests tatsächlich das richtige und nicht eigentlich Test auf Gleichheit gefragt?

Diese ``float("2006")``-Ausdrücke machen auch wenig Sinn. Warum nicht gleich die Zahl hinschreiben? Zumal das nach ganzen Jahreszahlen aussieht, und Gleitkommazahlen da wenig Sinn machen.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten