我有一個大資料框(示例)。我正在根據此代碼過濾資料:
A = [f"A{i}" for i in range(50)]
B = [f"B{i}" for i in range(50)]
C = [f"C{i}" for i in range(50)]
for i in A:
cond_A = (df[i]>= -0.0423) & (df[i]<=3)
filt_df = df[cond_A]
for i in B:
cond_B = (filt_df[i]>= 15) & (filt_df[i]<=20)
filt_df2 = filt_df[cond_B]
for i in C:
cond_C = (filt_df2[i]>= 15) & (filt_df2[i]<=20)
filt_df3 = filt_df2[cond_B]
- 當我列印
filt_df3時,我只得到一個空資料框 - 為什么? - 如何改進代碼,其他方法,如一些高級技術?
- 我不確定上面的代碼是否像下面的編輯中概述的那樣作業?
- 我想知道如何更改代碼,使其按照下面的編輯中概述的方式作業?
編輯:
- 我想洗掉基于列 (A0 - A49) 的行
cond_A。 - 然后根據列 (B0 - B49) 過濾來自 1 的資料幀
cond_B。 - 然后根據列 (C0 - C49) 過濾來自 2 的資料框
cond_C。
非常感謝您提前。
uj5u.com熱心網友回復:
在我看來,當您使用迭代進行過濾時,您的代碼存在問題。例如,filt_df在第一個回圈的每次迭代中都被覆寫。回圈結束時,filt_df只包含使用上次迭代中設定的條件過濾的資料。這是你打算做的嗎?
如果您想高效地進行過濾,您可以嘗試使用pandas.DataFrame.query(請參閱此處的檔案)。例如,如果要過濾掉 B0 到 B49 列包含 0 到 200 之間的值的所有行,可以嘗試使用下面的 Python 代碼(假設您已經在df下面的變數中匯入了原始資料)。
condition_list = [f'B{i} >= 0 & B{i} <= 200' for i in range(50)]
filter_str = ' & '.join(condition_list)
subset_df = df.query(filter_str)
print(subset_df)
uj5u.com熱心網友回復:
由于 A1 列僅包含 [-0.0423, 3] 之外的 -0.057,因此所有內容都被過濾掉了。
不過,您似乎沒有在每個回圈中接管過濾器,因為 filt_df{1|2|3} 被重置。
這應該有效:
import pandas as pd
A = [f"A{i}" for i in range(50)]
B = [f"B{i}" for i in range(50)]
C = [f"C{i}" for i in range(50)]
filt_df = df.copy()
for i in A:
cond_A = (df[i] >= -0.0423) & (df[i]<=3)
filt_df = filt_df[cond_A]
filt_df2 = filt_df.copy()
for i in B:
cond_B = (filt_df[i]>= 15) & (filt_df[i]<=20)
filt_df2 = filt_df2[cond_B]
filt_df3 = filt_df2.copy()
for i in C:
cond_C = (filt_df2[i]>= 15) & (filt_df2[i]<=20)
filt_df3 = filt_df3[cond_B]
print(filt_df3)
當然你會發現pandas庫中有很多過濾工具可以應用于多列
例如: https ://stackoverflow.com/a/39820329/6139079
uj5u.com熱心網友回復:
如果所有行都匹配,您可以過濾所有列并DataFrame.all進行測驗:
A = [f"A{i}" for i in range(50)]
cond_A = ((df[A] >= -0.0423) & (df[A]<=3)).all(axis=1)
B = [f"B{i}" for i in range(50)]
cond_B = ((df[B]>= 15) & (df[B]<=20)).all(axis=1)
C = [f"C{i}" for i in range(50)]
cond_C = ((df[C]>= 15) & (df[C]<=20)).all(axis=1)
&最后按位鏈接所有掩碼AND:
filt_df = df[cond_A & cond_B & cond_C]
如果得到空 DataFrame 似乎沒有行滿足所有條件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/449437.html
