在Python中,有没有一种方法可以用另一列开头的值填充列末尾的NaN



所以我有两列,例如A&B它们看起来像这样:

A           B
1           4
2           5
3           6
NaN         NaN
NaN         NaN
NaN         NaN

我想要这样:

A
1
2
3
4
5
6

有什么想法吗?

我假设您的数据在DataFrame中的两列中,您可以将B值附加到a值的末尾,然后使用np.nan删除NA值!=np.一个技巧。这里有一个的例子

import pandas as pd
import numpy as np
d = {
'A': [1,2,3, np.nan, np.nan, np.nan],
'B': [4,5,6, np.nan, np.nan, np.nan]
}
df = pd.DataFrame(d)
>>> df
A           B
1           4
2           5
3           6
NaN         NaN
NaN         NaN
NaN         NaN
# np.nan == np.nan trick 
>>> df['A'] == df['A']
0 True
1 True
2 True
3 False
4 False
5 False
Name: A, dtype: bool
x = pd.concat([df['A'], df['B']])
>>> x
0    1.0
1    2.0
2    3.0
3    NaN
4    NaN
5    NaN
0    4.0
1    5.0
2    6.0
3    NaN
4    NaN
5    NaN
dtype: float64
x = x[x == x]
>>> x
A
1
2
3
4
5
6

使用numpy,它可能类似于:

import numpy as np
A = np.array([1, 2, 3, np.nan, np.nan, np.nan])
B = np.array([4, 5, 6, np.nan, np.nan, np.nan])
C = np.hstack([A[A < np.infty], B[B < np.infty]])
print(C) # [1. 2. 3. 4. 5. 6.]

您可能想要的是:

import pandas as pd

a = pd.Series([1, 2, 3, None, None, None])

b = pd.Series([4, 5, 6, None, None, None])

print(pd.concat([a.iloc[:3], b.iloc[:3]]))

如果您只是在寻找非NaN值,请随意在Series中使用.dropna((。

相关内容

最新更新