【问题标题】:Pandas str.extract to be used on filtered data & cross tab together?Pandas str.extract 用于过滤数据和交叉表?
【发布时间】:2018-12-01 23:43:25
【问题描述】:

我正在尝试在过滤的数据集上提取选定的单词和交叉表,使用巨大的数据集进行说明。

train = pd.read_csv("d1.csv")
live= train[train['Survived']>0]# filter for survivors
print (live)
for live in live:
    live['Tt'] = live.Name.str.extract(' ([A-Za-z]+)\.', expand=False)
pd.crosstab(live['Tt'], live['Sex'])

我收到一个错误:AttributeError: 'str' object has no attribute 'Name'

实时检查过滤后的数据集,“名称”变量存在于数据集中。

我的哪一部分出错了?如何在交叉表中提取仅显示幸存者的答案?

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    错误原因

    如果您有 for x in df: 形式的 for 语句,那么您的基本意思是:循环遍历数据框 df 的所有列名,并在每次循环迭代期间将列名分配给变量 @ 987654323@.

    现在让我们看看你的 for 循环:

    for live in live:
        live['Tt'] = live.Name.str.extract(' ([A-Za-z]+)\.', expand=False)
    

    在这些行被执行之前,变量live 仍然包含一个熊猫数据框。但是,一旦在 for 循环变量 live 内,就已经从数据框中分配了一个字符串对象列名。因此,您收到的错误消息。

    解决方案

    我认为,如果您简单地从代码中消除 for-foop,您将获得预期的结果,如下所示:

    train = pd.read_csv("d1.csv")
    live= train[train['Survived']>0]# filter for survivors
    live['Tt'] = live.Name.str.extract(' ([A-Za-z]+)\.', expand=False)
    pd.crosstab(live['Tt'], live['Sex'])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-16
      • 2020-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-27
      相关资源
      最近更新 更多