Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.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 用另一个数据帧中的值填充空值_Python_Pandas_Dataframe - Fatal编程技术网

Python 用另一个数据帧中的值填充空值

Python 用另一个数据帧中的值填充空值,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个数据帧。在dataframe1中,我有一个包含一些空值的列。我希望通过比较每个数据帧的不同列的值,使用另一个数据帧(即dataframe2)的值来填充这些空值 数据帧1: Col1 Col2 A Null B Null C NUll A 1000 B 1120 C 3200 数据帧2: Col1 Col2 A 500 B 110 C 320 现在我想用第二个数据帧中的值填充第一个数据帧中的空值,其中dataframe1.col1=

我有两个数据帧。在dataframe1中,我有一个包含一些空值的列。我希望通过比较每个数据帧的不同列的值,使用另一个数据帧(即dataframe2)的值来填充这些空值

数据帧1:

Col1 Col2
A    Null
B    Null
C    NUll
A    1000
B    1120
C    3200
数据帧2:

Col1 Col2
A    500
B    110
C    320
现在我想用第二个数据帧中的值填充第一个数据帧中的空值,其中dataframe1.col1=dataframe2.col1

最终所需输出如下所示:

Col1 Col2
A    500
B    110
C    320
A    1000
B    1120
C    3200
如何在熊猫数据帧中执行此操作。

您可以使用替换
NaN
s by或:

详细信息

print(df1['Col1'].map(df2.set_index('Col1')['Col2']))
0    500
1    500
2    320
3    500
4    110
5    320
Name: Col1, dtype: int64

print(df2.set_index('Col1')['Col2'])
Col1
A    500
B    110
C    320
Name: Col2, dtype: int64
另一种解决方案是根据
映射的条件值进行过滤:

m = df1['Col2'] == 'Null'
df1.loc[m, 'Col2'] = df1.loc[m, 'Col1'].map(df2.set_index('Col1')['Col2'])
print (df1)
  Col1  Col2
0    A   500
1    B   110
2    C   320
3    A  1000
4    B  1120
5    C  3200

您可以将字符串转换为nan,然后组合数据帧,即

df.assign(Col2 = pd.to_numeric(df.Col2,errors='coerce'))\
     .set_index('Col1').combine_first(df2.set_index('Col1')).reset_index())

   Col1    Col2
0    A   500.0
1    A  1000.0
2    B   110.0
3    B  1120.0
4    C   320.0
5    C  3200.0

我的标准方法是将series.replace/series.fillna与series.map(dict)结合起来


这是排序问题,你赢了,先生。因为OP在最后没有提到索引,所以让解决方案留在这里。
df.assign(Col2 = pd.to_numeric(df.Col2,errors='coerce'))\
     .set_index('Col1').combine_first(df2.set_index('Col1')).reset_index())

   Col1    Col2
0    A   500.0
1    A  1000.0
2    B   110.0
3    B  1120.0
4    C   320.0
5    C  3200.0
fill_dict = dataframe2.set_index('Col1')['Col2'].to_dict()
dataframe1['Col2'] = dataframe1['Col2'].replace('Null', dataframe1['Col1'].map(fill_dict))