我有一个数据框列,其中包含如下所示格式的值:
df = pd.DataFrame(data={'c':[{'name': 'Paramount Pictures', 'id': 4}, {'name': 'United Artists', 'id': 60}, {'name': 'Metro-Goldwyn-Mayer (MGM)', 'id': 8411}]})
df
c
0 {'name': 'Paramount Pictures', 'id': 4}
1 {'name': 'United Artists', 'id': 60}
2 {'name': 'Metro-Goldwyn-Mayer (MGM)', 'id': 8411}
我想提取对应于Ids的所有值,例如4,60,8411。我为此编写了以下代码:
def FindIdInColumn(column,callBack,fieldName):
for i in range(0,len(column)):
collectionJson = column[i]
if type(collectionJson) !=str or collectionJson == '':
continue
idIndex = 0
idIndex = collectionJson.find(fieldName,idIndex,len(collectionJson))
while idIndex != -1:
idStr = ''
j = idIndex+5
while j<len(collectionJson) and collectionJson[j]!=',':
if not(collectionJson[j].isspace()) and collectionJson[j].isnumeric():
idStr = idStr + collectionJson[j]
j=j+1
callBack(i,idStr)
idIndex = idIndex+2
idIndex = collectionJson.find(fieldName,idIndex,len(collectionJson))
这里列是数据框列,fieldName是'Id',并且callback是在提取Id值之后要调用的函数。由于我要在7列上运行此功能,因此此功能正在消耗大量RAM。有没有一种方法可以优化此功能以使用les内存。
这是我所做的:
df = pd.DataFrame(data={'c':[{'name': 'Paramount Pictures', 'id': 4},
{'name': 'United Artists', 'id': 60},
{'name': 'Metro-Goldwyn-Mayer (MGM)', 'id': 8411}]})
df['id'] = df.apply(lambda r: dict(r['c'])['id'], axis=1)
df['id'].tolist()
[4, 60, 8411]