Python - объединенные кадры данных (без учета столбцов) - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть ежедневный процесс, который хранит CSV-файлы на озере S3. Процесс должен запускаться ежедневно, но данные не так часто меняются. Я хочу закачать sh файлы на S3 и в озеро данных ТОЛЬКО когда что-то меняется и меняется ТОЛЬКО ЧТО. Таким образом избегая дублирования в спектре и Redsfhit. Как я могу объединить эти два кадра данных? Мне нужно игнорировать последние 2 столбца. Ниже приведен пример фрейма данных.

df_yesteday=
    id  name    desc    extracted_date          processed_date
    1   apple   red     2020-04-15 12:56:28     2020-04-15 12:58:28
    2   pear    yellow  2020-04-15 12:56:28     2020-04-15 12:58:28
    3   banana  yellow  2020-04-15 12:56:28     2020-04-15 12:58:28

df_today=
    id  name    desc    extracted_date          processed_date
    1   apple   green   2020-04-16 12:56:13     2020-04-16 12:58:13
    2   pear    yellow  2020-04-16 12:56:13     2020-04-16 12:58:13
    3   banana  yellow  2020-04-16 12:56:13     2020-04-16 12:58:13

df_merged=
    id  name    desc    extracted_date          processed_date
    1   apple   green   2020-04-16 12:56:13     2020-04-16 12:48:13

Есть ли способ достичь этого?

Спасибо, Роза

Ответы [ 2 ]

0 голосов
/ 17 апреля 2020

Есть дополнительное осложнение. Есть 11 разных файлов. Итак, у меня есть для l oop итерации по одному сегменту, сохраняя эти 11 кадров данных в словаре. Затем у меня есть еще один для l oop итерации по второму сегменту, чтобы найти самые последние файлы. Сохранение этих 11 фреймов данных в словаре.

df_collection = {}
df_collection2 = {}

for obj in SOURCE_BUCKET.objects.filter(Prefix=SOURCE_BUCKET_PATH):
                if obj.key.endswith(currentdate.strftime("%Y%m%d") + ".csv"):  ##ends with the today's date.csv. Only
                                path = "s3://" + source_bucket + "/" + obj.key

                                x = obj.key.replace(SOURCE_BUCKET_PATH, "")
                                x = x.split("/")

                                # --- read into dataframe and add to df_collection--
                                df = pd.read_csv(path, index_col=False)
                                df.head()
                                df = df * 1  # turns true/false to 1/0

                                df_collection.update({x[1]: df})

for obj in TARGET_BUCKET.objects.filter(Prefix=TARGET_BUCKET_PATH):
                if obj.key.endswith(yesterday + ".csv"):  ##ends with the today's date.csv. Only
                                path_old = "s3://" + target_bucket + "/" + obj.key

                                df_old = pd.read_csv(path_old, index_col=False)
                                df_old.head()

                                df_collection2.update({x[1]: df_old})

0 голосов
/ 16 апреля 2020

Не объединение, а итерация по фрейму данных, если это возможно:

df_merged = pd.DataFrame()
for index, row in df_today.iterrows():
    if (row[0] != df_yesteday.loc[index,:][0]) or (row[1] != df_yesteday.loc[index,:][1]):
        df_merged = df_merged.append(df_today.loc[index,:])

Это, однако, предполагает, что индексы фрейма данных согласованы, т.е. между ними не появляются новые индексы между днями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...