Panda 中的合并不允许第二个密钥加入
Posted
技术标签:
【中文标题】Panda 中的合并不允许第二个密钥加入【英文标题】:Merge in Panda does not allow second key to join on 【发布时间】:2018-03-30 12:15:21 【问题描述】:在寻找答案并尝试一切后无法找到出路,所以就这样吧。 我有一个要按列合并的 *.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/right_on 以防“日期”被作为索引处理。没用。我知道问题不在于文件,结构是正确的,是代码。任何帮助都感激不尽。并且很抱歉在
上的可读性【问题讨论】:
您的某个文件似乎没有“时间”作为列标题。或者您可能需要去除列标题周围的空白。也许你有“时间”或类似的东西。 你能发布一个 df_list 的简短摘录吗? 更新:问题出在 df_list 上。我再次创建了它,一次读取每个文件一次,然后将它们传递给创建列表 df_list = [df1, df2....等等],它就像一个魅力。现在我只需要发现 df_list oneliner 发生了什么。 【参考方案1】:所以,问题出在之前。我之前已经将 ""out_list4"" 定义为列表:
out_list4 = list()
最后搞得一团糟。列表中的每个数据元素的大小应为 1872 x 3,但最后它再次将它们完全添加,使最后一个条目为 1872 x 12 并且没有“时间”标题。 将“out_list4”的定义更改为:
out_list4 = []
成功了。提示来自Combine a list of pandas dataframes to one pandas dataframe。
【讨论】:
以上是关于Panda 中的合并不允许第二个密钥加入的主要内容,如果未能解决你的问题,请参考以下文章