代码之家  ›  专栏  ›  技术社区  ›  anky

写入excel,但保留与引用数据框的列匹配的原始标题

  •  1
  • anky  · 技术社区  · 6 年前

    我有一个数据帧:

    参考文献:

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

    文件1

    SPEC_ID           Z_PRIMARY_SITE 
    Specification ID  Primary Site
    

    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泷u主要泷u网站等,而写入excel的数据完整。

    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 回复  |  直到 6 年前
        1
  •  1
  •   jezrael    6 年前

    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)