如何从熊猫中的几列中删除不同的字符串



我有一个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}
...

rankssearch_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])

最新更新