如何在Pandas DataFrame中附加到各个列

问题描述 投票:0回答:1

所以我想将数据添加/添加到特定的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)

很高兴听到任何想法。

python pandas dataframe nan
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.