簡體   English   中英

使用另一個 pandas 數據框的列填充 na 值,但使用列索引,而不是名稱

[英]Fill na values in one pandas dataframe's column using another, but using column indices, not names

我有一個特殊的情況,我知道第 0 列可能包含nan ,並且在所有這些情況下,第 1 列包含缺失值。 我事先不知道這些列的名稱,所以我想通過索引來 select 它們。

我能夠像這樣 select 列:

df.iloc[:, [0]]

如果我知道名稱,通常我可以像這樣從另一列中填充na值:

df["col0"].fillna(df["col1"])

所以我認為我應該能夠通過這樣做來復制它:

df.iloc[:, [0]].fillna(df[:, [1]])

但我得到:

Traceback (most recent call last):
  File "/home/---------/.pycharm_helpers/pydev/_pydevd_bundle/pydevd_exec2.py", line 3, in Exec
    exec(exp, global_vars, local_vars)
  File "<input>", line 1, in <module>
  File "/home/---------/_code/microgrid-support/venv/lib/python3.8/site-packages/pandas/core/frame.py", line 3458, in __getitem__
    indexer = self.columns.get_loc(key)
  File "/home/---------/_code/microgrid-support/venv/lib/python3.8/site-packages/pandas/core/indexes/base.py", line 3361, in get_loc
    return self._engine.get_loc(casted_key)
  File "pandas/_libs/index.pyx", line 76, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/index.pyx", line 82, in pandas._libs.index.IndexEngine.get_loc
TypeError: '(slice(None, None, None), [1])' is an invalid key

如何使用列索引而不是其名稱來填充na值?

您可以將bfilliloc一起使用

import pandas as pd
import numpy as np
df = pd.DataFrame({'a':[np.nan,2,3],'b':[100,200,300],'c':['x','y','z']})

df.iloc[:,:2] = df.iloc[:,:2].bfill(axis=1)

print(df)

Output

     a      b  c
0  100.0  100.0  x
1    2.0  200.0  y
2    3.0  300.0  z

使用 iloc 訪問器。 使用索引范圍切片以避免遇到問題。

樣本

df1 = pd.DataFrame({'sub_name': [np.nan,'AAB','AAC','BAA','CAA','CAC','CAD','CAE','EAA', 'FAA'], 
'val_1': [2,4,8,7,4,6,2,3,8,3], 
'A':[208,208,208,210,213,213,213,213,222,223]})


df1.iloc[0:1,0].fillna(df1.iloc[0,1])




   sub_name  val_1    A
0        2      2  208
1      AAB      4  208
2      AAC      8  208
3      BAA      7  210
4      CAA      4  213
5      CAC      6  213
6      CAD      2  213
7      CAE      3  213
8      EAA      8  222
9      FAA      3  223

我找到了一種與其他答案不同的方法。 我剛剛通過 dataframe 的.columns屬性訪問了列的名稱並使用了它:

例如:

df[df.columns[0]].fillna(df[df.columns[1]])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM