请需要您的帮助。
我有两个从csvs创建的数据框,我需要返回一个新的数据框,这将是特定字段/列上两者之间的差异。例如,如果来自df1的ID不在df2中,则df3应该为我提供df1中不在df2中的所有列和行。
请注意,df1和df2列不相同,即df1的列可能比df2多或少,但df3中的列应与d1开始。此外,ID(来自df1)和User ID(df2)的值将成为调节因素,字段中的数据将成为共同因素,但实际字段名称不同。
事先的歉意如下表所示。因此,在下面的示例中,df1中的第一行不在df2中,因此df3应该具有该行。完成后,我需要将df3保存为csv。
DF1
出售-09-32000-T LTD-已拒绝
购买-12-25000-G Ltd-完成
出售-15-35000-H Ltd-完成
DF2
买入-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.
答案 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'])]
我希望这会有所帮助!