Ausgabe
Ich habe diese Anleitung zum Lesen der Links in der einen Spalte gefunden, die Hyperlinks enthält.
Was ich habe, ist Excel, das Spalten enthält, die 2 Arten von Werten haben: NaN oder Link mit: Text und Hyperlink. Beispiel:
NaN
NaN
NaN
Link_text_1:www.something...
Link_text_2:www.something_else...
NaN
Wenn ich die Excel-Datei lade, wird nur der Text aus der Spalte zurückgegeben und der Hyperlink wird entfernt.
Ich habe es mit speziellen Anweisungen versucht, aber sie funktionieren nicht.
Basis meines Codes ist:
path=r'path_to_file'
df = pd.read_excel(path, sheet_name='docs')
link_column = df[["Unnamed: 18"]]
print(link_column)
Und dann sehe ich NaN oder Link_text.
Ich habe es versucht:
df_2 = pd.read_excel(path, sheet_name='Jobs', converters={"Unnamed: 18": lambda x: str(x.value) + "|"+ str(x.hyperlink.target)})
Aber es gibt einen Fehler zurück:
df_2 = pd.read_excel(path, sheet_name='Jobs', converters={"Unnamed: 18": lambda x: str(x.value) + "|"+ str(x.hyperlink.target)}) # read sheet Jobs from excel file
AttributeError: 'str' object has no attribute 'value'
Ich habe versucht, diesen Fehler zu googlen, aber ich konnte nichts finden, was für mich funktioniert.
Lösung
Ich bin mir nicht sicher, ob Pandas Excel-Hyperlinks analysieren kann.
Als Problemumgehung können Sie also das openpyxl.worksheet.hyperlink
Modul verwenden, um eine Liste der Hyperlinks in einem Arbeitsblatt/einer Spalte zu erhalten, und dann basierend auf dieser Liste eine Reihe in Ihrem Datenrahmen erstellen.
Versuche dies :
from openpyxl import load_workbook
import pandas as pd
wb = load_workbook('test.xlsx')
ws = wb['Sheet1']
list_of_links = []
for i in range(2, ws.max_row + 1):
try:
list_of_links.append(ws.cell(row=i, column=1).hyperlink.target)
except AttributeError:
list_of_links.append(np.nan)
df = pd.read_excel('test.xlsx')
df['Links'] = list_of_links
# Ausgabe:
print(df)
ColA Links
0 NaN NaN
1 NaN NaN
2 NaN NaN
3 Link_text_1 http://www.something.../
4 Link_text_2 http://www.something_else.../
5 NaN NaN
# Verwendetes Arbeitsblatt:
Beantwortet von – M92_
Antwort geprüft von – Marie Seifert (FixError Admin)