簡體   English   中英

將更正應用於 dataframe 的子采樣副本回到原始 dataframe?

[英]Applying corrections to a subsampled copy of a dataframe back to the original dataframe?

我是 Pandas 新手,所以請多多包涵。

概述:我從一個由數據收集腳本創建的自由格式文本文件開始,該腳本遠程訪問數十種不同類型的設備,以及每種設備的多個實例。 我使用 OpenRefine(一個非常棒的工具)將其轉換為 CSV,然后使用 JupyterLab 筆記本中的 Pandas 輸入 dataframe df

我對數據的第一次檢查顯示'Timestamp'列不是單調的。 我按如下方式訪問了各個數據源,在本例中是'T-meter'數據源。 該技術取自搜索結果 - 我不太了解,但它有效。

cond = df['Source']=='T-meter'
rows = df.loc[cond, :]
df_tmeter = pd.DataFrame(columns=df.columns)
df_tmeter = df_tmeter.append(rows, ignore_index=True)

然后檢查每個如下:

df_tmeter['Timestamp'].is_monotonic

幸運的是,這個問題很容易識別和修復:一些傳感器正在重置,然后發送錯誤(但仍然是單調的)時間戳,直到它們的時鍾更新。 我寫了 function tracking healing()來干凈地修補這些錯誤,它起到了治療作用:

df_tmeter['healed'] = df_tmeter['Timestamp'].apply(healing)

現在我的問題:

  1. 如何僅將df['Source']中的'T-meter'項的'healed'值返回到原始df['Timestamp']列?

  2. 鑒於 function tracking healing() ,有沒有一種干凈的方法可以直接在df上執行此操作?

謝謝!

編輯:我首先認為我應該在df中使用“視圖”,但是對數據的其他操作要么會產生錯誤,要么會默默地將視圖變成副本。

我寫了一個包裝 function heal_row()用於healing()

def heal_row( row ):
    if row['Source'] == 'T-meter':   # Redundant check, but safe!
        row['Timestamp'] = healing(row['Timestamp'])
    return row

然后做了以下事情:

df = df.apply(lambda row: row if row['Source'] != 'T-meter' else heal_row(row), axis=1)

這種排序很重要,因為healing()是基於先前行的有狀態的,因此不能是默認操作。

暫無
暫無

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

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