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 中的合并不允许第二个密钥加入的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有公共密钥的情况下合并 Apache Spark 中的两个数据帧?

向非活动应用程序发送密钥

计算第二个RC4密钥字节为0x00的事件的频率

检查一个密钥不存在

Android 签名密钥库

如何使用 iPhone 中的密钥从 JSON 中获取数据