我正在尝试从dataframe中的Locations列中提取国家,每个单元格可能有多个被‘\’分割的位置。目前我正在做这个,
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‘对象没有属性’拆分‘
,如果我对数据仓库中的一个特定的细胞做同样的事情,
bruh = [x.split(',')[-1] for x in list(org_df.loc[97,'Locations'].split('|'))]
print(bruh)我得到了想要的输出,[' India', ' India']
我无法理解如何解决这一问题,任何帮助都将不胜感激。
更新
我试图列出一个列表来存储一个或多个国家的价值。正如@meh指出的那样,我着陆的行比我的数据多。现在我已经做到了
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。
[{'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'}]发布于 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是一个字符串列表,列表没有拆分方法。
如果我理解得很好,从您想要的输出示例中,您将需要另一个循环。类似于:
[y.split(',')[-1] for x in org_df['Locations'].str.lower().str.split('|') for y in x]或
[x[-1].split(',')[-1] for x in org_df['Locations'].str.lower().str.split('|')]但是,我并不完全理解x.split(',')[-1]在代码中的用途。在第一种情况下,您将拥有比原始示例更多的国家。在第二种情况下,我选择了最后一个提到的国家。还不清楚你想要实现什么。
https://stackoverflow.com/questions/72317871
复制相似问题