Python pandas не может собираться с повторяющимися ключами

Цель этого кода - очистить кучу таблиц данных, превратить их в фреймы данных pandas, удалить некоторые ненужные столбцы и исправить дату.

Каждый фрейм данных имеет 2 столбца, первый из которых называется («Дата выпуска») в каждом фрейме данных, а другой столбец имеет другое имя для каждого фрейма данных.

Затем объедините эти таблицы в единый унифицированный фрейм данных со столбцом «Дата выпуска» в качестве индекса. Таким образом, события, происходящие в одно и то же время, должны находиться в одной строке.

Когда я попробовал этот код:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
import pandas as pd


class DataEngine:
    def __init__(self):
        self.urls = open(r"C:\Users\Sayed\Desktop\script\sample.txt").readlines()
        self.driver = webdriver.Chrome(r"D:\Projects\Tutorial\Driver\chromedriver.exe")
        self.wait = WebDriverWait(self.driver, 10)

    def title(self):
        names = []
        for url in self.urls:
            self.driver.get(url)
            title = self.driver.find_element_by_xpath('//*[@id = "leftColumn"]/h1').text
            names.append(title)
        return names

    def table(self):
        DataFrames = []
        for url in self.urls:
            self.driver.get(url)
            while True:
                try:
                    item = self.wait.until(
                        ec.visibility_of_element_located((By.XPATH, '//*[contains(@id,"showMoreHistory")]/a')))
                    self.driver.execute_script("arguments[0].click();", item)
                except Exception:
                    break

            df = pd.DataFrame(columns=['Release Date', 'Time', 'Actual', 'Forecast', 'Previous'])
            pos = 0
            for table in self.wait.until(
                    ec.visibility_of_all_elements_located((By.XPATH, '//*[contains(@id,"eventHistoryTable")]//tr'))):
                data = [item.text for item in table.find_elements_by_xpath(".//*[self::td]")]
                if data:
                    df.loc[pos] = data[0:5]
                    pos += 1

            df["Date"] = df["Release Date"].apply(lambda date: date[:12]) + " " + df["Time"]
            df.astype('unicode')
            df = df[['Date', 'Actual', 'Forecast', 'Previous', 'Release Date', 'Time']]
            df = df.drop(df.columns[-4:], axis=1).reset_index(drop=True)
            df = df.head(50)
            pd.to_datetime(df['Date'], format='%b %d, %Y %H:%M')
            DataFrames.append(df)
        return DataFrames

    def rename(self):
        FinalDataFrames = []
        tables = self.table()
        names = self.title()
        for name, table in zip(names, tables):
            table.rename(columns = {'Date': 'Release Date', 'Actual': name}, inplace=True)
            FinalDataFrames.append(table)
        return FinalDataFrames

    def finalDF(self):
        dfs = self.rename()
        dfs = [dfi.loc[~dfi.index.duplicated(keep='first')] for dfi in dfs]
        df = pd.concat(dfs, axis=1, join='outer').sort_index(ascending=False)
        df.astype('unicode')
        pd.to_datetime(df['Release Date'], format='%b %d, %Y %H:%M')
        df.set_index('Release Date')
        print(df.head())


if __name__ == "__main__":
    DataEngine().finalDF()

У меня такая ошибка:

 File "D:/Projects/Tutorial/database.py", line 71, in <module>
    if __name__ == "__main__":

  File "D:/Projects/Tutorial/database.py", line 66, in finalDF
    pd.to_datetime(df['Release Date'], format='%b %d, %Y %H:%M')

File "C:\Users\Sayed\Anaconda3\lib\site-packages\pandas\core\tools\datetimes.py", line 454, in to_datetime
    result = _assemble_from_unit_mappings(arg, errors=errors)

 File "C:\Users\Sayed\Anaconda3\lib\site-packages\pandas\core\tools\datetimes.py", line 520, in _assemble_from_unit_mappings

    raise ValueError("cannot assemble with duplicate keys")

ValueError: cannot assemble with duplicate keys
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
5 019
1

Ответы 1

Повторяющиеся имена столбцов

Эта ошибка является результатом того, что ваш df каким-то образом дублирует имена столбцов. Исходный код для pandas, который в этом случае генерирует ошибку, выглядит следующим образом:

from pandas import to_timedelta, to_numeric, DataFrame
    arg = DataFrame(arg)
    if not arg.columns.is_unique:
        raise ValueError("cannot assemble with duplicate keys")

Я думаю, что ваш код не работает, потому что имя столбца, на которое вы ссылаетесь с помощью pd.to_datetime(df['Release Date'], format='%b %d, %Y %H:%M'), не уникально.

ССЫЛКА в исходный код pandas

Другие вопросы по теме