因此,我尝试合并多个excel文件。每个文件将具有不同的维度。有些文件可能具有相同的列名,其中数据为NULL,相同或不同。我编写的脚本合并具有不同维度的多个文件,并删除重复的列,最后一个值将被丢弃到最后一个列单元格中。然而,我尝试将值连接起来,如果不相等,以便用户在excel中手动检查重复数据。
示例:用户1在df表中的age = 24,在df 1中的age = 27。我尝试在最终合并输出中获取该单元格中的两个值。
输入:df
| 用户|年龄|团队|
| - ------|- ------|- ------|
| 1个|二十四|x|
| 第二章|五十六|Y型|
| 三个|三十二|z|
df = pd.DataFrame({'user': ['1', '2', '3'],
'age': [24,56,32],
'team': [x,y,z]})
DF1
| 用户|年龄|姓名|
| - ------|- ------|- ------|
| 1个|二十七|罗纳德|
| 第二章|钠氮|尤金|
| 四个|四十四|杰夫|
| 五个|六十一|布兰妮|
df = pd.DataFrame({'user': ['1','2','4','5'],
'age': [27,NaN,44,61],
'name': ['Ronald','Eugene','Jeff','Britney']})
预期输出:
病例:
1.两个相同的值:保留一个
1.一个值是NaN:保留非NaN值
1.两个不同的值:使用分隔符进行连接,以便稍后查看。我将突出显示它。
| 用户|年龄|团队|姓名|
| - ------|- ------|- ------|- ------|
| 1个|二十四||二十七|
| 第二章|五十六|Y型|尤金|
| 三个|三十二|z|钠氮|
| 四个|四十四|钠氮|杰夫|
| 五个|六十一|钠氮|布兰妮|
这是我到目前为止所做的。用户将文件放入指定的文件夹,然后循环遍历所有Excel文件。第一个循环将数据附加到df Dataframe 中,每个下一个循环都是合并。问题是,我只从最后一个循环中获取值(如果不为空)。
df = pd.DataFrame()
for excel_files in FILELIST:
if excel_files.endswith(".xlsx"):
df1 = pd.read_excel(FILEPATH_INPUT+excel_files, dtype=str)
print(excel_files)
if df.empty:
df = df.append(df1)
else:
df = pd.merge(df,df1,on=UNIQUE_KEY,how=JOIN_METHOD,suffixes=('','_dupe'))
df.drop([column for column in df.columns if '_dupe' in column],axis=1, inplace=True)
这就是OUTPUT的外观
| 用户|年龄|团队|姓名|
| - ------|- ------|- ------|- ------|
| 1个|二十七|x|罗纳德|
| 第二章|五十六|Y型|尤金|
| 三个|三十二|z|钠氮|
| 四个|四十四|钠氮|杰夫|
| 五个|六十一|钠氮|布兰妮|
尝试循环通过列,然后连接。我可以看到df[new_col]中的组合值,但它无法更新df Dataframe ,最终输出显示NaN。
df = pd.DataFrame()
for excel_files in FILELIST:
if excel_files.endswith(".xlsx"):
df1 = pd.read_excel(FILEPATH_INPUT+excel_files, dtype=str)
#df1.set_index('uid',inplace=True)
print(excel_files)
#print(df1)
#print(df1.dtypes)
if df.empty:
df = df.append(df1)
else:
df = pd.merge(df,df1,on=UNIQUE_KEY,how=JOIN_METHOD,suffixes=('','_dupe'))
#df.drop([column for column in df.columns if '_dupe' in column],axis=1, inplace=True)
cols_to_remove = df.columns
for column in cols_to_remove:
if "_dupe" in column:
new_col = str(column).replace('_dupe','')
df[new_col] = df[new_col].str.cat(df[column],sep='||')
print('New Values: ',df[new_col])
df.pop(column)
任何帮助都将不胜感激。谢谢拉夫
1条答案
按热度按时间cqoc49vn1#
我将
merge
,然后在列上应用groupby.agg
:输出:
交流输出:
输出: