如何将作者这一列中的国家和作者姓名分别提取成新的一列?

img


我在提取数据的时候,不知道如何将作者这一列中的国家和作者姓名分别提取出来

import re
import pandas as pd
df = pd.DataFrame(columns = 'info,vote_count'.split(','))
df.loc[len(df)] = ['[中] 余华/江南出版社/1990-27/20元','fasdf12345']
df.loc[len(df)] = ['[澳大利亚] 余华/江南出版社/1990-27/20元','fasdf12345']
df.loc[len(df)] = ['余华/江南出版社/1990-27/20元','fasdf12345']
print(df)
df[['作者','出版社','出版时间','售价']] =[x.split('/') for x in df['info'].tolist()]
df['vote_count'] =  [re.search('\d+',x).group() for x in df['vote_count'].tolist()]
df1  = df[['作者','出版社','出版时间','售价','vote_count']]
print('------------------------')
# print(df1)
####这是咱们上次处理的结果,这次增加一个国籍列
#### 由于存在部分作者前面没有国籍,所以需要判断是否存在。
df1['国籍'] = [re.search(r'\[([\u4e00-\u9fa5]*)\]',x).group(1) if re.search(r'\[([\u4e00-\u9fa5]+)\]',x) else '' for x in df['作者'].tolist()]
df1['作者_1'] = [re.search(r'\]\s([\u4e00-\u9fa5]*)',x).group(1) if re.search(r'\[([\u4e00-\u9fa5]*)\]',x) else x for x in df['作者'].tolist()]
df1 = df1[['出版社','出版时间','售价','vote_count','国籍','作者_1']]
print(df1)

效果

img


import re
a = ['[清] 曹雪芹 著 / 人民文学出版社 / 1996-12 / 59.70元'
     ,'余华 / 作家出版社 / 2012-8-1 / 20.00元'
     ,'[英] 乔治·奥威尔 / 刘绍铭 / 北京十月文艺出版社 / 2010-4-1 / 28.00'
     ,'[哥伦比亚] 加西亚·马尔克斯 / 范晔 / 南海出版公司 / 2011-6 / 39.50元'
     ,'刘慈欣 / 重庆出版社 / 2012-1-1 / 168.00元']

for info in a:
    v = info.split('/')
    翻译 = ''
    if len(v) == 5:
        翻译 = v[1].strip()
    国家,作者 = re.findall(r'^\s*(?:\[(.+)\])?\s*([^\s]+)',v[0].strip())[0]
    出版社 = v[-3].strip()
    时间 = v[-2].strip()
    价格 = v[-1].strip()
    print(国家,作者,翻译,出版社,时间,价格)

img

找到这个表单接口,直接拿到接口数据进行提取比较方便