Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 写入excel,但保留与引用数据框的列匹配的原始标题_Python 3.x_Pandas_Dataframe - Fatal编程技术网

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

Python 3.x 写入excel,但保留与引用数据框的列匹配的原始标题,python-3.x,pandas,dataframe,Python 3.x,Pandas,Dataframe,我有一个数据帧: 参考: Primary Site Specification ID Brand Name Site1 1234 Brand1 Site2 12345 Brand2 Site3 123456 Brand3 另外:我有两个空白文件保存在一个文件夹中,看起来像: 文件1 文件2: BRAND_VALUE_NAME Brand Name 我的动

我有一个数据帧:

参考:

Primary Site   Specification ID   Brand Name
Site1          1234               Brand1
Site2          12345              Brand2
Site3          123456             Brand3
另外:我有两个空白文件保存在一个文件夹中,看起来像: 文件1

文件2:

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)
我实现了结果,数据也被拆分并写入匹配列中,但是我希望在将数据写入excel时保持文件的原始头(例如:Z_PRIMARY_SITE等)完好无损

当前输出:对于文件1等:

Specification ID  Primary Site
1234               Site1
12345              Site2
123456             Site3
SPEC_ID           Z_PRIMARY_SITE 
Specification ID  Primary Site
1234               Site1
12345              Site2
123456             Site3
file1等的预期输出:

Specification ID  Primary Site
1234               Site1
12345              Site2
123456             Site3
SPEC_ID           Z_PRIMARY_SITE 
Specification ID  Primary Site
1234               Site1
12345              Site2
123456             Site3
有没有办法做到这一点???

使用:

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


但是df和reference df都有相同的头,因为我读取的df是header=1,这样我就可以执行交集了。因此,它不会附加原始标题。你觉得怎么样?:)@是的,你是对的。所以解决方案应该是先交换值和列名,然后使用
df=pd.DataFrame(data=df.columns,columns=df.iloc[0])
谢谢我已经编辑了问题,现在将我当前的v/s预期输出放入其中。:)刚刚编辑了所需的输出,对此表示抱歉。:)非常感谢。但是我得到的传递值的错误形状是(1,7),索引暗示(7,7)@anky_91-不客气!感谢您的支持;)