обновление данных из CSV-файлов с использованием Python - PullRequest
0 голосов
/ 14 сентября 2018

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

старый файл (/old/Test1.csv)

tests   col1    col2    col3
test1     11       8       5
test3      9       5       7
test5     12       9      -1

новый файл (/new/Test1.csv)

)
tests   col2    col3    col4
test1      8       7      15
test3      5       9      10
test7      1       4       9
test9     11      10      12

Обратите внимание, что в новом файле col1 отсутствует, есть новый столбец col4, строка test5 отсутствует и есть две новые строки test7 и test9.Требуемый вывод должен:

  1. содержать все столбцы и строки из test1.csv и test2.csv
  2. включать обновленные данные в test2.csv для пар (row, col) из test1.csv
  3. Если нет обновлений пар (row, col) из test1.csv, то следует использовать данные в test1.csv.
  4. Все пустые ячейки в обновленном файле должны быть заполнены 0.

Для данных, показанных выше, это должен быть обновленный файл (Test1_update.csv)

tests    col1    col2    col3    col4
test1      11       8       7      15
test3       9       5       9      10
test5      12       9      -1       0 
test7       0       1       4       9
test9       0      11      10      12       

Я могу добраться до этой точки, используя код ниже:

tests    col1    col2    col3    col4
test1     Nan       8       7      15
test3     Nan       5       9      10
test5     Nan     Nan     Nan     Nan 
test7     Nan       1       4       9
test9     Nan      11      10      12


import pandas as pd
import numpy as np

df1 = pd.read_csv('\\dir\\test1.csv', index_col=0)
df2 = pd.read_csv('\\dir\\test2.csv', index_col=0)

new_index = list(set(list(df1.index.values)+list(df2.index.values)))
new_cols = list(set(list(df1.columns.values)+list(df2.columns.values)))

df3 = pd.DataFrame(index=new_index, columns=new_cols)
df4 = df2.reindex(df3.index)
df4 = df4.join(df3, rsuffix='_P')
df4 = df4.loc[:,~df4.columns.str.endswith('_P')]
print df4

1 Ответ

0 голосов
/ 14 сентября 2018

Мне удалось получить нужный кадр данных.

import pandas as pd
import numpy as np

df1 = pd.read_csv('\\dir\\test1.csv', index_col=0)
df2 = pd.read_csv('\\dir\\test2.csv', index_col=0)

new_index = list(set(list(df1.index.values)+list(df2.index.values)))
df2 = df2.reindex(new_index)
df2 = df2.join(df1, rsuffix='_P')
df2 = df2.loc[:,~df2.columns.str.endswith('_P')].fillna(df1).fillna(0)
df2.sort_index(inplace=True)
print df2.to_string()


       col2  col3  col4  col1                        
test1     8     7    15    11
test3     5     9    10     9
test5     9    -1     0    12
test7     1     4     9     0
test9    11    10    12     0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...