Как добавить отдельные столбцы в Pandas DataFrame - PullRequest
1 голос
/ 02 февраля 2020

Итак, я хочу добавить / добавить данные в указанный столбец c 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 без удаления всей строки, чтобы при наличии значения NaN с индексом 0 в столбце 3 и наличии целое число 5 с индексом 1 в том же столбце, целое число 5 перемещается вверх до индекса 0)

Рад слышать любые идеи.

1 Ответ

1 голос
/ 02 февраля 2020

IIU C для вашего текущего примера вы можете попробовать это:

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
...