【问题标题】:pandas - 'dataframe' object has no attribute 'str'pandas - 'dataframe' 对象没有属性 'str'
【发布时间】:2021-06-22 17:03:29
【问题描述】:

我正在尝试过滤掉包含产品列表的数据框。但是,当我运行代码时,我得到了 pandas - 'dataframe' 对象没有属性 'str' 错误。

这是代码行:

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

如果有人有任何建议,请告诉我。我已经搜索了很多次,我很困惑。

Product 是一个对象数据类型。

编辑:

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")]

这是头:

   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:这里是打印(数据),A 是产品。当我打印出来时,看起来 A 不在产品类别下。

     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   

【问题讨论】:

  • 您的代码应该可以工作。你确定你没有在某处做log_df.str(而不是log_df['Product'].str)吗?或者,您可能有 重复索引,名称为 Product(例如,两列同名)?
  • @RafaelC 是的,我很肯定。昨天还可以,现在不行了。
  • 你对type(log_df['Product'])有什么看法?
  • @RafaelC 不,没有重复的索引。
  • @jpp pandas.core.frame.DataFrame

标签: python pandas q


【解决方案1】:

简答:data.columns=[headerName]改成data.columns=headerName

解释:当你设置data.columns=[headerName]时,列是MultiIndex对象。因此,您的log_df['Product'] 是一个DataFrame,对于DataFrame,没有str 属性。

当您设置data.columns=headerName 时,您的log_df['Product'] 是一列,您可以使用str 属性。

出于任何原因,如果您需要将数据保留为 MultiIndex 对象,还有另一种解决方案:首先将您的 log_df['Product'] 转换为 Series。之后,str 属性可用。

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

但是,我想第一个解决方案就是您要寻找的解决方案

【讨论】:

  • 我也在寻找同样的东西,这个答案对我帮助很大。感谢分享。
猜你喜欢
  • 2021-11-19
  • 2021-06-26
  • 1970-01-01
  • 2015-09-11
  • 1970-01-01
  • 2021-11-01
  • 2014-01-10
  • 2019-01-15
  • 2017-02-12
相关资源
最近更新 更多