在Panda合并不允许第二个密钥加入

时间:2017-10-18 14:58:56

标签: python-3.x pandas text

在寻找答案后,尝试一切都无法找到出路,所以就这样吧。 我有一个* .txt文件列表,我想按列合并。我100%确定它们具有相同的结构,如下所示

File1
date       | time     | model_name1
1850-01-16 | 12:00:00 | 0.10

File2
date       | time     | model_name2
1850-01-16 | 12:00:00 | 0.50

File3..... and so on

注意:垂直条只是为了清晰起见。

现在我的输出应该是这样的:

Output
date       | time     | model_name1 | model_name2
1850-01-16 | 12:00:00 | 0.10        | 0.50

使用以下代码

out_list4 = os.listdir(out_directory)
df_list = [pd.read_table(out_path+os.fsdecode(file_x), sep='\s+') for file_x in out_list4]

df_merged = reduce(lambda  left,right: ,
                   pd.merge(left,right,on=['date'], how='outer'), df_list)

pd.DataFrame.to_csv(df_merged, out_path+'merged.txt', sep='\t', index=False)

我管理以下输出:

Output
date       | time_x     | model_name1 |time_y  | model_name2
1850-01-16 | 12:00:00   |   0.10      |12:00:00| 0.50

正如所料,因为我只有“”on = ['date']“”。

现在,如果我尝试将时间写为第二个键,如下所示:“”on = ['date','time']“”,它会因以下错误而崩溃:

Key error:'time'

以及一长串追溯。

我尝试将left_on / righ_on置于“date”作为索引处理的情况下。没用我知道问题不在于文件,结构是对的,它是代码。任何帮助都感激不尽。对于

的可读性感到抱歉

1 个答案:

答案 0 :(得分:1)

所以,问题出在之前。我之前已将“”out_list4“”定义为列表:

out_list4 = []

最后它弄得一团糟。列表中的每个数据元素应该具有1872 x 3的大小,但最后它再次添加它们使得最后一个条目是1872 x 12并且没有'时间'标题。 将“”out_list4“”的定义更改为:

{{1}}

做了这个伎俩。提示来自Combine a list of pandas dataframes to one pandas dataframe