Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pandas-Concat两个数据帧的行数和列数不同_Python_Pandas_Data Science_Data Analysis - Fatal编程技术网

Python Pandas-Concat两个数据帧的行数和列数不同

Python Pandas-Concat两个数据帧的行数和列数不同,python,pandas,data-science,data-analysis,Python,Pandas,Data Science,Data Analysis,我有两个不同行号和列的数据帧。这两个表几乎没有包括“客户ID”在内的公共列。这两个表的大小分别为11697行×15列和385839行×6列。客户ID可能在第二个表中重复。我希望合并这两个表,并希望使用客户ID合并类似的列。如何使用python实现这一点。 一张桌子看起来像这样- 另一个看起来像这样- 我使用以下代码- pd.concat([df1, df2], sort=False) 只是想确保我没有丢失任何信息?如何检查是否有多个条目具有一个ID,以及如何将其合并到一个结果中 编辑-

我有两个不同行号和列的数据帧。这两个表几乎没有包括“客户ID”在内的公共列。这两个表的大小分别为11697行×15列和385839行×6列。客户ID可能在第二个表中重复。我希望合并这两个表,并希望使用客户ID合并类似的列。如何使用python实现这一点。 一张桌子看起来像这样-

另一个看起来像这样-

我使用以下代码-

 pd.concat([df1, df2], sort=False)
只是想确保我没有丢失任何信息?如何检查是否有多个条目具有一个ID,以及如何将其合并到一个结果中

编辑-

当我使用上述代码时,这里是数据集中NA值的前后-


有人能告诉我哪里出错了吗?

我相信在这种情况下,
DataFrame.merge
会起作用:

# use how='outer' to preserve all information from both DataFrames
df1.merge(df2, how='outer', on='customer_id')
DataFrame.join
如果两个数据帧的索引都设置为
customer\u id
,也可以工作(这也更简单):


pd.concat将在这里实现这一技巧,只需将axis设置为1以连接第二个轴(列),您应该首先将两个数据帧的索引设置为customer\u id

import pandas as pd
pd.concat([df1.set_index('customer_id'), df2.set_index('customer_id')], axis = 1)
如果要在连接后忽略具有空值的行,请使用dropna:

pd.concat([df1.set_index('customer_id'), df2.set_index('customer_id')], axis = 1).dropna()

阅读concat的文档主要用于将一个数据帧堆叠在另一个数据帧之上。此解决方案为大多数数据提供NA值(39000行中有38000行。如果我删除NA,我将得到0行。concat将返回任何缺失值的nan值,两个数据帧的客户ID是否相同?我不确定客户ID,因为在一个帧中我有11000个ID,而在另一个数据帧中我有39000个ID(观察值)在这种情况下,当id不同时,如何合并列?关于这一点,我刚刚检查过。所有id在两个数据帧中都是唯一的。第二个代码建议-此代码给我一个错误-ValueError:列重叠但未指定后缀:Index([u'state',u'timezone',dtype='object'))哦,好吧……这是因为这两个表都有名为
state
timezone
的列。您需要指定一个后缀,这样它们在生成的数据帧中就成了类似于
state\u suffix\u left
state\u suffix\u right
的东西。检查文档中的
join
方法、参数
lsuffix
rsuffix
设置
df1
df2
的索引后,尝试调用
df1.join(df2,how='outer',lsuffix=''u left',rsuffix=''u right')
。我相信它会起作用。
pd.concat([df1.set_index('customer_id'), df2.set_index('customer_id')], axis = 1).dropna()