Пишите, чтобы преуспеть, но сохраняйте оригинальные заголовки, которые соответствуют столбцам ссылочного кадра данных - PullRequest
0 голосов
/ 02 сентября 2018

У меня есть датафрейм:

справка:

Primary Site   Specification ID   Brand Name
Site1          1234               Brand1
Site2          12345              Brand2
Site3          123456             Brand3

также: у меня есть 2 пустых файла в папке, которая выглядит следующим образом: file1

SPEC_ID           Z_PRIMARY_SITE 
Specification ID  Primary Site

file2:

BRAND_VALUE_NAME
Brand Name

Мой мотив - записать данные из ссылки df в файлы, где строка = 1 из файла совпадает с заголовком ссылки df.

Я использую следующий код:

path = "path where files are kept"
file_list = os.listdir(path)
for i in file_list:
    filename = os.path.join(path, i)
    df = pd.read_excel(filename, header = 1) #to match the 1st row of file to the header of reference df
    cond = df.columns.intersection(reference.columns)
    reference[cond].to_excel(filename,index = False)

Я достигаю результата, и данные разделяются и записываются также в соответствующие столбцы, однако я хотел бы сохранить исходный заголовок файла, например, для: Z_PRIMARY_SITE и т. Д., При записи данных в excel. 1017 *

Текущий вывод: для файла 1 и т. Д .:

Specification ID  Primary Site
1234               Site1
12345              Site2
123456             Site3

Ожидаемый вывод для file1 и т. Д .:

SPEC_ID           Z_PRIMARY_SITE 
Specification ID  Primary Site
1234               Site1
12345              Site2
123456             Site3

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

1 Ответ

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

Использование:

df = pd.read_excel(filename)
#added new column for testing
print (df)
            SPEC_ID Z_PRIMARY_SITE new
0  Specification ID   Primary Site  tt

#intersection by first row
cond = pd.Index(df.iloc[0]).intersection(reference.columns)
df1 = reference[cond].copy()
#create first row by columns names
df1.loc[-1] = df1.columns
d = dict(zip(df.iloc[0], df.columns))
#and rename columns for df columns
df1 = df1.sort_index().rename(columns=d)
print (df1)
             SPEC_ID Z_PRIMARY_SITE
-1  Specification ID   Primary Site
 0              1234          Site1
 1             12345          Site2
 2            123456          Site3

Альтернативное решение:

cond = pd.Index(df.iloc[0]).intersection(reference.columns)
df1 = reference[cond].copy()
df1 = pd.DataFrame([df1.columns], columns=df1.columns).append(df1)
d = dict(zip(df.iloc[0], df.columns))
df1 = df1.rename(columns=d)
print (df1)
            SPEC_ID Z_PRIMARY_SITE
0  Specification ID   Primary Site
0              1234          Site1
1             12345          Site2
2            123456          Site3

df1.to_excel(filename,index = False)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...