举例:如果df1中含有10行,5列数据,其中部分行的几列数据缺失;df2是一个10000行(总之大量)的数据表,含有完整的5列数据,可能包含大部分df1缺失的数据,他们有某些共同的列可用于互相查询,我如何从df2中查询到对应df1缺失的数据并填入df1中,且df1仍然保持原来的行和列结构(且原有的数据不丢失)?
我试过多种方法:
merge()操作会使df1与df2相同的列变成两列,增加了多余的列,没法合并df1原有的数据和df2填充的数据(他们会形成不同的列)
combine_first() ,两个表的默认行索引并不相同,除非将可以用于查询的列设为每行索引,但是这样会导致df2所有行都填入了df1,虽然合并了表数据,但是形成了太多多余行数据。
本来这是一个简单的功能,但是我目前没有想到很好的简单直接的方法,可能是我对pandas不太熟悉。如果有别的包能更好的处理表格数据也可以推荐一下。
感谢。
部分回答摘自GPT:
对于您的需求,可以使用merge()
方法结合fillna()
方法来实现从df2
中查询并填充到df1
中。下面是一种可能的解决方案:
import pandas as pd
# 假设df1和df2分别为两个DataFrame对象
# 使用merge()方法将df2中与df1中某些共同列匹配的行合并到df1中
merged_df = df1.merge(df2, on=['共同列1', '共同列2'], how='left')
# 使用fillna()方法将df2中的非缺失值填充到df1中对应的缺失值位置
filled_df1 = merged_df.fillna(df1)
# filled_df1中的数据包含了从df2中查询到的缺失值填充后的结果,
# 但仍然保持了df1原有的行和列结构,原有的数据不丢失
上述代码首先使用merge()
方法将df2
中与df1
中某些共同列匹配的行合并到df1
中,通过设置how='left'
参数,确保保留df1
原有的行。
然后,使用fillna()
方法将df2
中的非缺失值填充到df1
中对应的缺失值位置,其中df1
参数指定了填充时使用df1
的值。
经过上述操作,filled_df1
中的数据将包含从df2
中查询到的缺失值填充后的结果,同时保持了df1
原有的行和列结构,不会丢失原有的数据。
希望这个解决方案对您有所帮助。关于处理表格数据的其他包,您也可以考虑使用datatable
、numpy
等库进行操作,具体选择取决于您的需求和偏好。