1. ホーム
  2. パイソン

[解決済み] pandas - 'dataframe' オブジェクトには 'str' という属性がありません。

2022-03-03 22:04:57

質問

商品のリストを含むデータフレームをフィルタリングしようとしています。しかし、コードを実行するたびに、pandas - 'dataframe' object has no attribute 'str' errorが表示されます。

以下はコードの行です。

include_clique = log_df.loc[log_df['Product'].str.contains("Product A")]

どなたか、お勧めの方法がありましたら、教えてください。何度も検索したのですが、かなり行き詰まっています。

Product はオブジェクトデータ型です。

EDITです。

import __future__
import os
import pandas as pd
import numpy as np
import tensorflow as tf
import math



data = pd.read_csv("FILE.csv", header = None)

headerName=["DRID","Product","M24","M23","M22","M21","M20","M19","M18","M17","M16","M15","M14","M13","M12","M11","M10","M9","M8","M7","M6","M5","M4","M3","M2","M1"] 
cliques = [(Confidential)] 
data.columns=[headerName]


log_df = data

log_df = np.log(1+data[["M24","M23","M22","M21","M20","M19","M18","M17","M16","M15","M14","M13","M12","M11","M10","M9","M8","M7","M6","M5","M4","M3","M2","M1"]])
copy = data[["DRID","Product"]].copy()
log_df = copy.join(log_df)


include_clique = log_df.loc[log_df['Product'].str.contains("Product A")]

以下は、headです。

   ID    PRODUCT  M24      M23       M22     M21
0  123421  A  0.000000  0.000000  1.098612  0.0   
1  141840  A  0.693147  1.098612  0.000000  0.0   
2  212006  A  0.693147  0.000000  0.000000  0.0   
3  216097  A  1.098612  0.000000  0.000000  0.0   
4  219517  A  1.098612  0.693147  1.098612  0.0

編集2:以下はprint(data)で、Aは商品です。プリントアウトすると、Aはカテゴリーproductの下にないように見えますが、どうでしょうか?

     DRID                         Product   M24   M23  M22  M21  M20  \
0           52250  A                     0.0   0.0  2.0  0.0  0.0   
1          141840  A                    1.0   2.0  0.0  0.0  0.0   
2          212006  A                      1.0   0.0  0.0  0.0  0.0   
3          216097  A                      2.0   0.0  0.0  0.0  0.0   

解決方法は?

簡単にお答えします。 変更 data.columns=[headerName]data.columns=headerName

説明する。 を設定した場合 data.columns=[headerName] の場合、カラムはMultiIndexオブジェクトになります。したがって log_df['Product'] はDataFrameであり、DataFrameには str 属性があります。

を設定すると data.columns=headerName は、あなたの log_df['Product'] は1つのカラムであり str 属性で指定します。

何らかの理由で、データをMultiIndexオブジェクトとして保持する必要がある場合、別の解決策があります。 log_df['Product'] をシリーズに変換します。その後に str 属性が利用できます。

products = pd.Series(df.Product.values.flatten())
include_clique = products[products.str.contains("Product A")]

しかし、最初の解決策は、あなたが探しているものだと思います。