比较两个数据框以使用熊猫返回新数据框-Python

时间:2018-08-16 09:55:47

标签: python pandas dataframe

请需要您的帮助。

我有两个从csvs创建的数据框,我需要返回一个新的数据框,这将是特定字段/列上两者之间的差异。例如,如果来自df1的ID不在df2中,则df3应该为我提供df1中不在df2中的所有列和行。

请注意,df1和df2列不相同,即df1的列可能比df2多或少,但df3中的列应与d1开始。此外,ID(来自df1)和User ID(df2)的值将成为调节因素,字段中的数据将成为共同因素,但实际字段名称不同。

事先的歉意如下表所示。因此,在下面的示例中,df1中的第一行不在df2中,因此df3应该具有该行。完成后,我需要将df3保存为csv。

DF1

方向ID数量公司状态

出售-09-32000-T LTD-已拒绝

购买-12-25000-G Ltd-完成

出售-15-35000-H Ltd-完成

DF2

方向用户ID数量公司状态评分

买入-12-25000-G Ltd-完成-好评

出售-15-35000-H Ltd-完成-好评

非常感谢

到目前为止的

代码:

import pandas as pd

fileLocationDF1 = "BBG.csv"
fileLocationDF2 = "corp.csv"

createDf1 = pd.read_csv(fileLocationDF1, low_memory = False)
createDf2 = pd.read_csv(fileLocationDF2, engine='python')

我发现了isin方法,我认为这会有所帮助,但问题是“用户ID”列(df2)在数据帧中有一个空格(在csv中就是这种情况)。

createDf1[createDf1.ID.isin(createDf2.columns[2].values)]

时出现以下错误
AttributeError: 'str' object has no attribute 'values'

由于用户ID带有空格,我在isin方法中传递了[2]列

请帮助解决该错误以及为何不读取数据的原因,以便我可以获取一个唯一的集合,其中df2中的用户ID不在df1中的ID中。

See below - the one highligted is the one that is missing in DF2 and I would like this in df3

CParserError: Error tokenizing data. C error: Buffer overflow caught - possible malformed input file.

1 个答案:

答案 0 :(得分:2)

我会做的:

import pandas as pd

fileLocationDF1 = "BBG.csv"
fileLocationDF2 = "corp.csv"

createDf1 = pd.read_csv(fileLocationDF1, low_memory = False)
createDf2 = pd.read_csv(fileLocationDF2, engine='python')

# df3 will have createDf1 columns with ID's that are not in createDf2
# ~ means 'not' to the filter
# Acces the column via ['COLUMN NAME'] so you can put spaces into it ;)
df3 = createDf1[~createDf1['ID'].isin(createDf2['User ID'])]

我希望这会有所帮助!