我有一个pd数据帧,看起来像这样:
keyword | ranks |search_type | search_volume
0 keyword1 |[{'rank': 1}]| 1 | {'search_volume': 10}
1 keyword1 |[{'rank': 1}]| 2 |{'search_volume': 10}
2 keyword2 |[{'rank': 1}]| 1 |{'search_volume': 390}
3 keyword2 |[{'rank': 1}]| 2 |{'search_volume': 390}
4 keyword3 |[{'rank': 1}]| 1 |{'search_volume': 170}
...
列ranks
和search_volume
应该是仅包含数字的整数,我正在尝试找到一种方法来删除[{'rank':
,{'search_volume':
和右括号,因此表格如下所示:
keyword | ranks |search_type | search_volume
0 keyword1 | 1 | 1 |10
1 keyword1 | 1 | 2 |10
2 keyword2 | 1 | 1 |390
3 keyword2 | 1 | 2 |390
4 keyword3 | 1 | 1 |170
...
我试过这个:df['ranks'].replace('[{'rank':','',inplace=True)
但它什么也没做。 这也不是解决这个问题的最快方法。
我看了一下这个线程 Pandas DataFrame:从列中的字符串中删除不需要的部分,此解决方案一次适用于一列(最好一次去除所有未处理的字符串(,它返回此错误:AttributeError: 'list' object has no attribute 'lstrip'
.
我正在使用python 3。
这是使用pd.Series.apply
的一种方式:
df['ranks'] = df['ranks'].apply(lambda x: x[0]['rank'])
df['search_volume'] = df['search_volume'].apply(lambda x: x['search_volume'])
这假定您的ranks
系列包含列表,而您的search_volume
系列包含字典。
使用应用:
df['ranks'] = df['ranks'].apply(lambda x: x[0]['rank'])
df['search_volume'] = df['search_volume'].apply(lambda x: x[0]['search_volume'])
奖金
这个将适用于您的情况,使其成为单行:
df[['ranks', 'search_volume']] = df[['ranks', 'search_volume']].applymap(lambda x: x[0].values()[0])