场景:我有一个代码,可以从目录中读取一组excel文件,并将每个文件的内容收集到列表中的数据框中,然后将其连接起来。代码还读取另一个文件,从中获取某些标识符的数据到另一个数据帧中。你知道吗
列表中串联数据帧中的数据示例:
Iteration Run Value
9154aa 3 100
9154aa 7 112
9154aa 1 120
3148nf 77 58
3148nf 7 86
9421jh 23 27
9421jh 42 736
9421jh 4 44
9421jh 9 82
其他数据帧的示例:
Iteration Date
9154aa 01012011
1582he 01052013
3148nf 01092011
9421jh 01012010
第一个DF包含多个迭代的信息,而额外的DF包含所有迭代的一段信息。你知道吗
目标:我的目标是将与迭代相关的日期放入第一个数据帧(对应于该迭代的每一行)。你知道吗
输出示例:
Iteration Run Value Date
9154aa 3 100 01012011
9154aa 7 112 01012011
9154aa 1 120 01012011
3148nf 77 58 01092011
3148nf 7 86 01092011
9421jh 23 27 01012010
9421jh 42 736 01012010
9421jh 4 44 01012010
9421jh 9 82 01012010
问题:尽管脚本运行时没有崩溃,但由于某些原因,我的输出复制了一个(或多个)迭代条目。你知道吗
错误输出示例:
Iteration Run Value Date
9154aa 3 100 01012011
9154aa 7 112 01012011
9154aa 1 120 01012011
3148nf 77 58 01092011
3148nf 77 58 01092011
3148nf 7 86 01092011
3148nf 7 86 01092011
9421jh 23 27 01012010
9421jh 42 736 01012010
9421jh 4 44 01012010
9421jh 9 82 01012010
我不知道这种行为的原因。你知道吗
问题:我做错了什么?你知道吗
代码:
sourcefolder = "\\Network\DGMS\2018"
outputfolder = "\\Network\DGMS\2018"
adjustmentinputs = "//Network/DGMS/Uploader_v1.xlsm"
selectmonth = input("Please enter month ('January', 'February'...):")
# Get Adjustments
ApplyOnDates = pd.read_excel(open(adjustmentinputs, 'rb'), sheet_name='Calendar')
# Get content
all_files = glob.glob(os.path.join(sourcefolder, "*.xls*"))
contentdataframes = []
contentdataframes2 = []
for f in all_files:
df = pd.read_excel(f)
df['Iteration'] = os.path.basename(f).split('.')[0].split('_')[0]
mask = df.columns.str.contains('Base|Last|Fix')
c2 = df.columns[~mask].tolist()
df = df[c2]
contentdataframes.append(df)
print (f)
concatenatedfinal = pd.concat(contentdataframes)
# Date Adjustment
ApplyOnDates = ApplyOnDates[["IT", selectmonth]]
ApplyOnDates = ApplyOnDates.rename(index=str, columns={"IT": "Iteration", selectmonth: "Date"})
Datawithfixeddates = pd.DataFrame.merge(concatenatedfinal, ApplyOnDates, left_on='Iteration', right_on='Iteration', indicator=False)
OBS:在这个例子中,我只使用了少量的数据,而通常情况下,它会进行几十次迭代。你知道吗
你需要在这里使用左连接。根据documentation,left join保留第一个数据帧中的所有值,根据第一个数据帧的结构从第二个数据帧中派生值。你知道吗
这正是你需要的。因此,将合并中的参数
how
设置为“left”您的数据如下:
以及
以下是事实
相关问题 更多 >
编程相关推荐