0

1 行と 1500 を超える列 (機能) を含むデータセットに対して for ループを使用して反復しようとしています。機能は float オブジェクトを含むタプルです。十分な情報がない場合は、csv ファイルを添付できます。私がしたいのは、行の各列の下に 1 が存在するかどうかを確認することだけです。1 を含む列は、空のリストに送信されます。

以下の for ループを実行するためにスローされるエラーの核心 (+: 'int' および 'tuple' のサポートされていないオペランド型) を理解していますが、その理由はわかりません。データのサブセットに対して反復を開始し、エラーをスローしました。

for x in range(1,2):
peaks_to_delete = []   #empty list to add column labels (tuples)
index_to_delete = []   #empty list to add row
df1 = df_850.iloc[0]   #df_850 is dataframe
df2 = pd.DataFrame(df1)
df3 = df2.T
for col in df3:
    if sum(df3[col]) == 1:   #this is where it throws the error
        peaks_to_delete.append(col)
for index in df3.index:
    index_to_delete.append(index)
df_850.drop(peaks_to_delete, axis=1, inplace=True)   #drops the column from the dataset
df_850.drop(index_to_delete, inplace=True)   #drops the index (row label) from dataset

データポイントの数が原因で反復がタイムアウトしたためですか?繰り返しますが、完全に明確でない場合は、追加情報を追加できます。

事前に助けていただきありがとうございます!

4

1 に答える 1

0

列のデータは整数ではなくタプルであり、その方法でタプルの配列を合計することはできません。列の合計が必要な場合は、列を合計する前にタプルの値を合計します。

if sum(df[col].apply(lambda x: sum(x))) == 1:

特定の列の値に が含まれているかどうかを確認したい場合は1、列の値のいずれかのタプルに 1 が含まれているかどうかを確認できます。

if any(df[col].apply(lambda x: 1 in x)):

列の値が等しいかどうかを確認したい場合1

if any(df[col].apply(lambda x: x == 1)):

anyTrue上記の例では、ブール値のいずれかがラムダ式を満たすかどうかを返します。

于 2018-10-25T18:27:03.147 に答える