我正在尝试在过滤的数据集上提取选定的单词和交叉表,使用巨大的数据集来说明。
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”对象没有属性“Name”
实时检查过滤后的数据集,数据集中存在“名称”变量。
我哪里出了问题,如何在交叉表中提取仅显示幸存者的性别和 tt 的答案?
最佳答案
错误原因
如果您有一个 for x in df:
形式的 for 语句,那么您基本上所说的是:循环遍历数据帧 df
的所有列名称>,并在每次循环迭代期间将列名称分配给变量x
。
现在让我们看看您的 for 循环:
for live in live:
live['Tt'] = live.Name.str.extract(' ([A-Za-z]+)\.', expand=False)
在执行这些行之前,变量live
仍然包含一个pandas数据帧。但是,一旦进入 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'])
关于python - Pandas str.extract 可一起用于过滤数据和交叉表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53572006/