想知道解決這個問題的最佳方法是什么。如果我有一個包含以下列的 DF
df1()
type_of_fruit name_of_fruit price
..... ..... .....
和一個名為
expected_cols = ['name_of_fruit','price']
自動檢查 df1 與 expected_cols 串列的最佳方法是什么?我正在嘗試類似的東西
df_cols=df1.columns.values.tolist()
if df_cols != expected_cols:
然后嘗試將任何不在expected_cols 中的列放到另一個df,但這對我來說似乎不是一個好主意。有沒有辦法保存“洗掉”的列?
df2 = df1.drop(columns=expected_cols)
但這似乎有問題,具體取決于列排序,以及列可能具有比預期更多的值或比預期更少的值的情況。如果值少于預期值(即 df1 僅包含列 name_of_fruit),我計劃使用
df1.reindex(columns=expected_cols)
但是關于如何以編程方式執行此操作以及如何處理列數超出預期的問題有點不確定。
uj5u.com熱心網友回復:
您可以使用set difference使用-:
假設df1有cols:
In [542]: df1_cols = df1.columns # ['type_of_fruit', 'name_of_fruit', 'price']
In [539]: expected_cols = ['name_of_fruit','price']
In [541]: unwanted_cols = list(set(d1_cols) - set(expected_cols))
In [542]: df2 = df1[unwanted_cols]
In [543]: df1.drop(unwanted_cols, 1, inplace=True)
uj5u.com熱心網友回復:
使用groupby沿列軸簡潔地拆分 DataFrame。在這種情況下,檢查列是否在您的串列中以形成True分組器,您可以將結果存盤在 dict 中,其中鍵獲取具有串列中列子集的 DataFrame,并且False鍵具有列子集不在串列。
樣本資料
import pandas as pd
df = pd.DataFrame(data = [[1,2,3]],
columns=['type_of_fruit', 'name_of_fruit', 'price'])
expected_cols = ['name_of_fruit','price']
代碼
d = dict(tuple(df.groupby(df.columns.isin(expected_cols), axis=1)))
# If you need to ensure columns are always there then do
#d[True] = d[True].reindex(expected_cols)
d[True]
# name_of_fruit price
#0 2 3
d[False]
# type_of_fruit
#0 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/408954.html
標籤:
