Скопируйте весь столбец xlsx с помощью Python3 и вставьте его в тот же столбец - PullRequest
0 голосов
/ 05 декабря 2018

Так что я хочу сделать, это выбрать столбец и скопировать значения под тем же столбцом, который я выбрал, я знаю, что могу использовать pandas dataframe, чтобы выбрать столбец только по имени, но я не знаю, лучше ли этовместо этого использовать openpyxl.Есть много подобных вопросов по этому поводу, но никто не отвечает на мой вопрос.Вот мой код, в котором я пытаюсь использовать фреймы данных и numpy:

for file in files:
        fileName = os.path.splitext(file)[0]
        if fileName == 'fileNameA':
            df = pd.read_excel(file)
            list_dates = ['the string of the date i need' for dates in df['Date']]
            # Here what happend is 
            # that for every date it generates a list with dates
            print(list_dates)
            new_df = df.loc[np.repeat(df['Dates'], len(list_dates)]
            writer = pd.ExcelWriter('fileNameA1.xlsx', engine='xlsxwriter')
            new_df.to_excel(writer, 'Sheet 1')
            writer.save()
except Exception as e:
    print(e)

#Input data:
Date
01/12/2018
02/12/2018
03/12/2018
04/12/2018

#Output i want:
Date
01/12/2018
02/12/2018
03/12/2018
04/12/2018
01/12/2018
02/12/2018
03/12/2018
04/12/2018

Какая лучшая альтернатива - работать напрямую с openpyxl или использовать pandas, а затем использовать средство записи для генерации xlsx?

В этом вопросе они используют df_try ​​или concat (), но как узнать, сколько раз я должен это повторить?

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Наилучшее обычно слишком субъективно, чтобы быть полезным, и по этой причине вопросы, касающиеся рекомендаций по библиотекам, будут закрыты.

Если вы не выполняете никаких реальных манипуляций сданные для статистических целей и т. д. тогда вам, вероятно, не нужны панды.Использование одной библиотеки может означать, что ваш код будет легче понять и поддерживать.

Один подход в openpyxl позволит вам просто append() дат в конце текущей рабочей таблицы.Примерно так: (код, вероятно, потребует некоторых изменений).

for row in ws:
   ws.append(row[:1])
0 голосов
/ 05 декабря 2018

Просто используйте NewDF = pd.concat([df, df]) Это продублирует все строки df.

Если вы пытаетесь дублировать строки три раза или какой-то другой нечетный интервал, вы можете просто собрать временную df, чтобы получить желаемые результаты (для добавления двух копий df используйте следующее):

tempdf = pd.concat([df, df])

NewDF = pd.concat([df, tempdf])

...