Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.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 - Fatal编程技术网

Python 数据帧中对象的条件替换

Python 数据帧中对象的条件替换,python,pandas,Python,Pandas,我有两个数据帧df_1和df_2。两者都有一个索引datetimecode,这是一个pd.datetime64对象,还有一个temp列。我想遍历df_1,并用'df_2'中相应的温度值替换所有NaN温度值 大概是这样的: for index, row in df_1.iterows(): row['temp'] = df_2[index]['temp'] if row['temp'] ==np.nan 但这是无效的sytax df_1.fillna(df_2, inplace=Tr

我有两个数据帧
df_1
df_2
。两者都有一个索引
datetimecode
,这是一个
pd.datetime64
对象,还有一个
temp
列。我想遍历
df_1
,并用
'df_2'
中相应的温度值替换所有NaN温度值

大概是这样的:

for index, row in df_1.iterows():
      row['temp'] = df_2[index]['temp'] if row['temp'] ==np.nan
但这是无效的sytax

df_1.fillna(df_2, inplace=True)


演示

tidx = pd.date_range('2016-03-31', periods=5)
df_1 = pd.DataFrame(dict(temp=[1, np.nan, 3, np.nan, 5]), tidx)
df_2 = pd.DataFrame(dict(temp=np.arange(11, 16)), tidx)

df_1.fillna(df_2)


这就是您想要的:

df_1 = pd.DataFrame({'temp': [1,2,3,np.nan,5,np.nan,7]})
   temp
0   1.0
1   2.0
2   3.0
3   NaN
4   5.0
5   NaN
6   7.0

df_2 = pd.DataFrame({'temp': [8,9,10,11,12,13,14]})
   temp
0     8
1     9
2    10
3    11
4    12
5    13
6    14

df_1.temp.fillna(df_2['temp'], inplace=True)

   temp
0   1.0
1   2.0
2   3.0
3  11.0
4   5.0
5  13.0
6   7.0

   temp
0     8
1     9
2    10
3    11
4    12
5    13
6    14

@布莱恩,很明显,我们两个都在同一时间回答了。可能只相隔几秒钟……谢谢你们两个@Brian-对不起,我不能同时接受两个答案!我已经实现了第一种方法,在
df_1.fillna
语句中有一个错误,它说
pandas.indexes.base.InvalidIndexError
错误不一致-它取决于所选的时间段,但我看不到任何导致它的原因……事实上,当运行相同的数据时,错误是完全间歇性的,并且显然是随机的-所以看起来这个解决方案中存在一些不稳定性?那么。。。幸好我给了你两个解决方案;-)不过我正在调查这个警告。那有点麻烦哈!是的,这是件好事。但您的第二个解决方案目前不适用于我,它给出了以下错误:
ValueError:无法从重复轴重新编制索引。
。我的问题!
df_2
中有一个重复的数据项(因为导入的时间码有夏令时),这导致了索引错误(尽管奇怪,只是有时)。你的两种方法都很有效。
df_1.loc[df_1.temp.isnull(), 'temp'] = df_2.temp

df_1
df_1 = pd.DataFrame({'temp': [1,2,3,np.nan,5,np.nan,7]})
   temp
0   1.0
1   2.0
2   3.0
3   NaN
4   5.0
5   NaN
6   7.0

df_2 = pd.DataFrame({'temp': [8,9,10,11,12,13,14]})
   temp
0     8
1     9
2    10
3    11
4    12
5    13
6    14

df_1.temp.fillna(df_2['temp'], inplace=True)

   temp
0   1.0
1   2.0
2   3.0
3  11.0
4   5.0
5  13.0
6   7.0

   temp
0     8
1     9
2    10
3    11
4    12
5    13
6    14