熊猫:如果数据框列为“ NaN”,则替换该列

时间:2019-03-22 23:42:27

标签: python pandas dataframe

我有一个包含许多列的数据框。一列可能有NaN。在这种情况下,可以在下一列中找到该值。

为简化起见...这在这里:

In[1]:

d = {'col1': [1, 2, 3], 
     'col2': [5, np.nan, np.nan],
     'col3': [55, 9, 22]}
df = pd.DataFrame(data=d)
print(tabulate(df, headers = 'keys', tablefmt = 'psql'))

Out[1]:

+----+--------+--------+--------+
|    |   col1 |   col2 |   col3 |
|----+--------+--------+--------|
|  0 |      1 |      5 |     55 |
|  1 |      2 |    nan |      9 |
|  2 |      3 |    nan |     22 |
+----+--------+--------+--------+

应该在这里变成这样:

In[2]:

d = {'col1': [1, 2, 3], 
     'col2': [5, 9, 22],
     'col3': [55, 9, 22]}
df = pd.DataFrame(data=d)
print(tabulate(df, headers = 'keys', tablefmt = 'psql'))

Out[2]:
+----+--------+--------+--------+
|    |   col1 |   col2 |   col3 |
|----+--------+--------+--------|
|  0 |      1 |      5 |     55 |
|  1 |      2 |      9 | <==  9 |  # col3's value copied to col2
|  2 |      3 |     22 | <== 22 |  # col3's value copied to col2
+----+--------+--------+--------+

我尝试了这个(没有成功):

df.loc[ df['col2'].isna() ] = df[ df['col2'].isna() ]['col3']

有什么建议吗?

3 个答案:

答案 0 :(得分:2)

您需要按行向后填充:

df.bfill(axis=1)
#   col1  col2  col3
#0   1.0   5.0  55.0
#1   2.0   9.0   9.0
#2   3.0  22.0  22.0

答案 1 :(得分:1)

是的,您只能使用 threadpool thread_pool; map<Key, Value> map; for (const std::pair<Key, Value> & element : map) { thread_pool.Add([](const Value& value) { } (element); } thread_pool.Join();

np.where

用于使用df.col2=np.where(df.col2.isna(),df.col3,df.col2) df Out[535]: col1 col2 col3 0 1 5.0 55 1 2 9.0 9 2 3 22.0 22

修改代码
.loc

答案 2 :(得分:1)

d['col2'].fillna(d['col3'], inplace = True)