【问题标题】:'DataFrame' object has no attribute 'str' ​'DataFrame' 对象没有属性 'str' ​
【发布时间】:2021-06-26 23:53:53
【问题描述】:

我正在尝试遍历列以在 df 的所有列中的特定单元格(例如“用户 0”)中查找 0,并将该单元格替换为 null。

我试过运行这个:

for col in df.columns:
    df.loc[sa[col].str.contains('0'), col] = ''

但它给了我'DataFrame'对象没有属性'str' ​

【问题讨论】:

  • 什么是sa[col]?该错误告诉您str 不是sa[col] 的成员。这是开始查看可能发生的事情的好地方
  • 这里的sa 是什么?
  • 为什么你使用df作为源数据框,而sa作为过滤数据框?
  • 抱歉,sa 是我的实际数据框,我将其保留为“df”以用作别名。无论如何,我的笔记本中都是 sa.loc[sa[col]。

标签: python pandas dataframe data-science data-cleaning


【解决方案1】:

这可能是因为您的数据框有多个同名的列。我可以通过执行以下操作重新创建此错误:

import pandas as pd

df = pd.DataFrame([['0','1','2'],['2','4','5']],columns = ['a','b','b'])
for c in df.columns:
    print(df[c].str.replace("1",""))

问题是,一旦你得到重复的列名(在我的例子中,当c == 'b'),那么df[c]实际上是一个有2个列的数据框并且.str不可用。

因此,如果这是您的问题,请找到具有相同名称的列并为其指定唯一名称。

此外,正如@JonClements 所提到的,根本不需要遍历列,您只需执行df = df.replace('.*0.*', '', regex=True)

【讨论】:

  • 该单元格不仅包含“0”,还包含“用户 0”、“帐户 0”等字符串。我想用 NaN 替换整个单元格,在该字符串中出现任何“0”。替换会这样做吗?谢谢
  • @user14318465 DataFrame.replace 是否适用于您的情况,例如:df.replace('.*0.*', '', regex=True)
  • @JonClements 我试过:for col in df.columns: df.replace('.*0.*', '', regex=True) 但它没有用:(
  • 你不想循环......只是字面上的df.replace('.*0.*', '', regex=True),它应该会给你一个新的DF返回你想要的?
  • 我只是使用替换作为字符串操作的示例,而不是解决您的整个问题。删除列是否至少消除了.str 错误?
猜你喜欢
  • 2021-11-19
  • 1970-01-01
  • 1970-01-01
  • 2021-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-11
  • 1970-01-01
相关资源
最近更新 更多