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-不客气!感谢您的支持;)