【发布时间】:2017-06-27 13:45:50
【问题描述】:
愿望:
我想要一种方法来合并两个数据框并保留指定数据框中的非相交数据。
问题:
我有重复的数据,我希望这一行可以删除重复的数据:
final_df = new_df[~new_df.isin(previous_df)].dropna()
示例数据和数据测试:
record = Record(1000, 9300815, '<redacted type>', '<redacted id>')
test_df = pd.DataFrame([record])
if not final_df.empty:
# this produces an empty data frame
empty_df = test_df[test_df.isin(final_df)].dropna()
# this produces the record
record_df = final_pdf[final_pdf.col01 == record.col01]
背景:
我正在加载 xml 数据并将 xml 文件转换为几种不同的记录类型作为命名元组。我将每种记录类型拆分为自己的数据框。然后,我通过构造previous_df 来比较 xml 文件中的当前数据集与已加载到数据库中的数据:
previous_df = pd.read_sql_table(table_name, con=conn, schema=schema, columns=columns)
列是根据命名元组中的字段动态创建的。数据库模式是使用 sqlalchemy 生成的,我添加了UniqueConstraint 以在我认为数据库中有重复项时进行管理。
提前感谢您提供的任何帮助。
【问题讨论】:
-
看pandas.DataFrame.duplicated。如果您添加一些示例数据和预期输出,您将获得一些详细的帮助。
-
我还使用了
drop_duplicates(keep=False),它有效地调用duplicated,然后在一行中删除它们。我真的需要一个好方法来合并两个数据框并删除它们的交集。 -
我建议您查看Pandas Documentation 关于合并数据帧的信息。我不知道你想去哪里,但你可以在那里找到解决问题的方法
标签: python postgresql pandas sqlalchemy data-ingestion