#python
Вопрос:
Итак, у меня есть две колонки, например A amp; B, и они выглядят так:
A B 1 4 2 5 3 6 NaN NaN NaN NaN NaN NaN
и я хочу, чтобы это было так:
A 1 2 3 4 5 6
Есть какие-нибудь идеи?
Ответ №1:
Я предполагаю, что ваши данные находятся в двух столбцах в фрейме данных, вы можете добавить значения B в конец значений A, а затем удалить значения NA с помощью np.nan != трюк np.nan. Вот пример
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) gt;gt;gt; df A B 1 4 2 5 3 6 NaN NaN NaN NaN NaN NaN # np.nan == np.nan trick gt;gt;gt; 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']]) gt;gt;gt; 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] gt;gt;gt; x A 1 2 3 4 5 6
Ответ №2:
Используя 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 lt; np.infty], B[B lt; np.infty]]) print(C) # [1. 2. 3. 4. 5. 6.]
Ответ №3:
Что вам может понадобиться, так это:
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, не стесняйтесь использовать .dropna() последовательно.