所以我想将数据添加/添加到特定的pandas dataFrame列,但不会在其余列中引起NaN值
即
DataFrame = pd.DataFrame(columns=["column1", "column2", "column3"])
for i in range():
DataFrame = DataFrame.append({"column1":int(i)}, ignore_index=True)
DataFrame = DataFrame.append({"column2":float(i*2)}, ignore_index=True)
DataFrame = DataFrame.append({"column3":int(i*5)}, ignore_index=True)
print(DataFrame)
这将返回:
column1 column2 column3
0 0.0 NaN NaN
1 NaN 0.0 NaN
2 NaN NaN 0.0
3 1.0 NaN NaN
4 NaN 2.0 NaN
5 NaN NaN 5.0
6 2.0 NaN NaN
7 NaN 4.0 NaN
8 NaN NaN 10.0
我们想要返回的内容:
column1 column2 column3
0 0.0 0.0 0.0
1 1.0 2.0 5.0
2 2.0 4.0 10.0
我知道我可以在所有不同的列中使用一个.append。但是在某些情况下,要附加的数据会根据多种条件而有所不同。因此,我想知道是否有可能追加到数据框中的单个列而在其余列中不生成NaN值。这样我就可以避免编写数百个if else语句。
或者如果有人对如何“折叠” NaN值有个好主意(删除NaN值而不删除整个行,以便如果在第3列的索引0处有一个NaN值,而在索引处有一个整数5 1在同一列中,整数5向上移动到索引0)
很高兴听到任何想法。
您当前的示例中的IIUC,您可以尝试以下操作:
DataFrame[['column2','column3']]=DataFrame[['column2','column3']].bfill()
输出:
column1 column2 column3
0 0.0 0.0 0.0
1 NaN 0.0 0.0
2 NaN 2.0 0.0
3 1.0 2.0 5.0
4 NaN 2.0 5.0
5 NaN 4.0 5.0
6 2.0 4.0 10.0
7 NaN 4.0 10.0
8 NaN 6.0 10.0
9 3.0 6.0 15.0
10 NaN 6.0 15.0
11 NaN 8.0 15.0
12 4.0 8.0 20.0
13 NaN 8.0 20.0
14 NaN NaN 20.0
然后删除NaN
:
DataFrame.dropna(inplace=True)
输出:
column1 column2 column3
0 0.0 0.0 0.0
3 1.0 2.0 5.0
6 2.0 4.0 10.0
9 3.0 6.0 15.0
12 4.0 8.0 20.0