给定以下内容DataFrame
:
A B
0 -10.0 NaN
1 NaN 20.0
2 -30.0 NaN
我想合并列A
和B
,用NaN
列A
中的值填充列中的单元格B
,然后删除列B
,结果是DataFrame
这样的:
A
0 -10.0
1 20.0
2 -30.0
我已经设法通过使用iterrows()
函数解决了这个问题。
完整的代码示例:
import numpy as np
import pandas as pd
example_data = [[-10, np.NaN], [np.NaN, 20], [-30, np.NaN]]
example_df = pd.DataFrame(example_data, columns = ['A', 'B'])
for index, row in example_df.iterrows():
if pd.isnull(row['A']):
row['A'] = row['B']
example_df = example_df.drop(columns = ['B'])
example_df
这似乎工作正常,但我在文档中iterrows()
找到以下信息:
您永远不应修改要迭代的内容。
看来我做错了。
为了达到相同的结果,什么是更好/推荐的方法?
使用Series.fillna
有Series.to_frame
:
df = df['A'].fillna(df['B']).to_frame()
#alternative
#df = df['A'].combine_first(df['B']).to_frame()
print (df)
A
0 -10.0
1 20.0
2 -30.0
如果更多列且每行需要第一个非缺失值,请使用回填缺失值,并按一个列的一个元素列表选择第一列DataFrame
:
df = df.bfill(axis=1).iloc[:, [0]]
print (df)
A
0 -10.0
1 20.0
2 -30.0
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句