Обработка данных я собрал. Как заставить CSV выстроиться в линию на pandas данных - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть пара csv, где есть две колонки: Item и Price. Некоторые csv имеют разное количество строк, некоторые точно совпадают. Как я могу затем объединить CSV так, чтобы цены соответствовали правильному имени индекса (Item), где цены для каждого CSV идут в свой собственный столбец (как дата CSV) И если Item не присутствует в индексе, он будет соединен? Я вручную добавил дату создания файла в качестве еще одного столбца для каждого CSV, так как не смог учесть это при создании первого пакета, но я не уверен, что это действительно полезно, поскольку я могу просто установить имя метки в качестве даты.

Я думаю что-то вроде этого:

    Item                      csv/date1  csv/date2     csv/date...
    Topper Blue Glitter1 ea    2.50        2.75         2.55
    Topper Pink Glitter1 ea    2.50        2.75         2.55
    Bamboo Needles 35MM1 ea    2.75        2.75         2.99
    6MM Knitting Needles ea                3.50
    8MM Bamboo Needles   ea                             3.79

РЕДАКТИРОВАТЬ

Вывод с concat:

                                        0         Date        Price
    Item            
    DoleSunflower Bacon Crunch Cho..    NaN      2020-03-16   $4.98
    Apple Slices280 g                   NaN      2020-03-16   $4.00
    PC OrganicsCooking Onions907 g      NaN      2020-03-16   $2.98
    Limes1 ea                           NaN      2020-03-16   $0.68
    Granny Smith Apples                 NaN      2020-03-16   $1.09
    ... ... ... ...
    Greenhouse Peppers, Yellow       2020-03-17   NaN          NaN
    Lettuce Iceberg1 ea              2020-03-17   NaN          NaN
    Farmer's MarketSweet Baby        2020-03-17   NaN          NaN
    Kohlrabi                         2020-03-17   NaN          NaN
    Farmer's MarketFM English Cucu   2020-03-17   NaN          NaN 

Вывод с слиянием:

                                Price_x  Date_x     Price_y    Date_y
    Item                
    DoleSunflower Bacon C       $4.98   2020-03-16  NaN NaN
    Apple Slices280 g           $4.00   2020-03-16  NaN NaN
    PC OrganicsCooking On       $2.98   2020-03-16  NaN NaN
    Limes1 ea                   $0.68   2020-03-16  $0.68   2020-03-17
    Limes1 ea                   $0.68   2020-03-16  $0.68   2020-03-17

Наконец-то получили желаемые результаты с помощью concat. Предложение ниже сделало итерацию проще:

                                    03-16-2020  03-17-2020  03-20-2020
    Item            
    DoleSunflower Bacon Crunch      $4.98       NaN          NaN
    Apple Slices280 g               $4.00       NaN          NaN
    PC OrganicsCooking Onio         $2.98       NaN          NaN
    Limes1 ea                       $0.68       NaN          NaN
    Granny Smith Apple              $1.09       NaN          NaN
    ... ... ... ...
    Green Cabbage                   NaN         NaN          $2.52
    Celery Stalks1 ea               NaN         NaN          $1.9

Ответы [ 2 ]

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

После того, как вы создаете кадры данных, используя read_csv, set_index в столбце Item, вы должны затем сделать concat или merge

pd.concat([df1, df2], axis=1, join='outer')

df1.merge(df2, how='outer', left_index=True, right_index=True)

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

Трудно сказать больше, не глядя на данные.

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

Считайте каждый CSV в другой фрейм данных, установите item в качестве индекса, переименуйте price столбец в creation_date и, наконец, объедините все из них, это пример, предварительно определив имена CSV. может потребоваться некоторая корректировка:

 csv_files = ['file1.csv', 'file2.csv', 'file3.csv']

 dfs = [pd.read_csv(x) for x in csv_files]

 for df in dfs:
      df.Date = pd.to_datetime(df.Date)
      df.set_index('Item', inplace=True)
      date = df.Date.max().strftime('%Y_%m_%d')
      df.rename({'Price': date}, inplace=True)

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