首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取AttributeError:在使用列表理解时,“列表”对象没有属性“拆分”

获取AttributeError:在使用列表理解时,“列表”对象没有属性“拆分”
EN

Stack Overflow用户
提问于 2022-05-20 11:03:37
回答 1查看 228关注 0票数 1

我正在尝试从dataframe中的Locations列中提取国家,每个单元格可能有多个被‘\’分割的位置。目前我正在做这个,

代码语言:javascript
复制
conditions = [
          (len(org_df['Locations'].str.lower().str.split('|')) == 1),
          (len(org_df['Locations'].str.lower().str.split('|')) > 1)]

values = [
          list(org_df['Locations'].str.lower().str.split(','))[-1],
          [x.split(',')[-1] for x in list(org_df['Locations'].str.lower().str.split('|'))]
]

org_df['Country'] = np.select(conditions,values)

这给了我AttributeError:'list‘对象没有属性’拆分‘

,如果我对数据仓库中的一个特定的细胞做同样的事情,

代码语言:javascript
复制
bruh = [x.split(',')[-1] for x in list(org_df.loc[97,'Locations'].split('|'))]
print(bruh)

我得到了想要的输出,[' India', ' India']

我无法理解如何解决这一问题,任何帮助都将不胜感激。

更新

我试图列出一个列表来存储一个或多个国家的价值。正如@meh指出的那样,我着陆的行比我的数据多。现在我已经做到了

代码语言:javascript
复制
for x in org_df['Locations'].str.lower().str.split('|'):
            loc_list = []
            for y in x :
              word = y.split(',')[-1].lower()
              if(word.strip() in loc_list):
                continue
              else:
                loc_list.append(word.strip())
            loc_str= ','.join(loc_list)

            country_list.append(loc_str)

有任何方法可以使用列表理解来改进我的代码吗?

更新2这里是请求的输出@Onur。

代码语言:javascript
复制
[{'Acronym': nan,
  'Age': '35 Years to 64 Years \xa0 (Adult)',
  'Completion Date': nan,
  'Conditions': 'Breast Cancer|Cervical Cancer',
  'Country': 'india',
  'Enrollment': 151538.0,
  'First Posted': 'March 10, 2008',
  'Funded Bys': 'Other|NIH',
  'Gender': 'Female',
  'Interventions': 'Other: active surveillance|Other: educational intervention|Procedure: examination|Procedure: long-term screening',
  'Last Update Posted': 'August 26, 2013',
  'Locations': 'Tata Memorial Hospital, Mumbai, India',
  'NCT Number': 'NCT00632047',
  'Other IDs': 'CDR0000586791|TATA-1900215717A1',
  'Outcome Measures': 'Effectiveness of well planned health education programs and low-cost screening methods (e.g., clinical breast exam and visual inspection of the cervix) in reducing the incidence of and mortality due to breast and cervical cancer',
  'Phases': 'Phase 2',
  'Primary Completion Date': 'December 2015',
  'Rank': 1,
  'Results First Posted': nan,
  'Sponsor/Collaborators': 'Tata Memorial Hospital|National Cancer Institute (NCI)',
  'Start Date': 'May 1998',
  'Status': 'Unknown status',
  'Study Designs': 'Allocation: Randomized|Primary Purpose: Screening',
  'Study Documents': nan,
  'Study Results': 'No Results Available',
  'Study Type': 'Interventional',
  'Title': 'Early Detection of Breast Cancer and Cervical Cancer in Women in India',
  'URL': 'https://ClinicalTrials.gov/show/NCT00632047'}]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-20 11:45:44

首先,您不需要将org_df['Locations'].str.lower().str.split('|')转换为列表(它已经是可迭代的,可以直接在循环中使用)。

其次,当您拆分时,其效果类似于Python中的常规字符串拆分,您将得到一个列表。因此,org_df['Locations'].str.lower().str.split('|')生成一个满是列表的pd.Series对象。因此,在for x in org_df['Locations'].str.lower().str.split('|')中,x是一个字符串列表,列表没有拆分方法。

如果我理解得很好,从您想要的输出示例中,您将需要另一个循环。类似于:

代码语言:javascript
复制
[y.split(',')[-1] for x in org_df['Locations'].str.lower().str.split('|') for y in x]

代码语言:javascript
复制
[x[-1].split(',')[-1] for x in org_df['Locations'].str.lower().str.split('|')]

但是,我并不完全理解x.split(',')[-1]在代码中的用途。在第一种情况下,您将拥有比原始示例更多的国家。在第二种情况下,我选择了最后一个提到的国家。还不清楚你想要实现什么。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72317871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档