Объединение файлов CSV с различными данными столбца в одном столбце - PullRequest
0 голосов
/ 09 июля 2019

Пример набора данных структурирован следующим образом

  • Home_HeatSensor_AA.CSV
  • Office_HeatSensor_BB.CSV
  • Ship_ElevationSensor_XXYY.CSV

AA.CSV имеет следующие столбцы с образцом строки

   Time  AA  AB  BB  Site  Type
0  1:00   5   4   5  Home  Heat

BB.CSV отформатирован аналогично

   Time  AA  AB  BB    Site  Type
0  1:00   6   2   4  Office  Heat

Тем не менее, XXYY.CSV имеет совершенно другой формат

   Time     XX       XY     YY  Site       Type
0  1:00  1.332  12.1123  4.212  Ship  Elevation

Мне нужно объединить эти три CSV-файла в основной CSV-файл, отформатированный следующим образом

   Time AA AB AB     XX       XY     YY    Site       Type
0  1:00  5  4  4                           Home       Heat
0  1:00  6  2  2                         Office       Heat
0  1:00           1.332  12.1123  4.212    Ship  Elevation

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

for filename in filepaths:
 df = pd.read_csv(filename, index_col=None, header=0, parse_dates=True,infer_datetime_format=True)
 li.append(df)

1 Ответ

2 голосов
/ 09 июля 2019

pd.concat

def read_csv(fn):
    return pd.read_csv(fn, skipinitialspace=True)

files = ['Home_HeatSensor_AA.CSV', 'BB.CSV', 'XXYY.CSV']
cols = ['Time', 'AA', 'AB', 'BB', 'XX', 'XY', 'YY', 'Site', 'Type']

pd.concat(map(read_csv, files), sort=False)[cols].to_csv('MASTER.CSV', index=False)

Затем подтвердите

cat MASTER.CSV

Time,AA,AB,BB,XX,XY,YY,Site,Type
1:00,5.0,4.0,5.0,,,,Home,Heat
1:00,6.0,2.0,4.0,,,,Office,Heat
1:00,,,,1.3319999999999999,12.1123,4.212,Ship,Elevation

Если вы не знаете названия столбцов в расширенном порядке:

def read_csv(fn):
    return pd.read_csv(fn, skipinitialspace=True)

files = ['Home_HeatSensor_AA.CSV', 'BB.CSV', 'XXYY.CSV']

pd.concat(map(read_csv, files), sort=False).to_csv('MASTER.CSV', index=False)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...