当字典中存在 null 值时,计算字典中的字符串



我有一个看起来像这样的数据帧(Thing_2被评估为字符串(:

ID           Thing           Thing_2
1             abc            [{"object_1": "a", "object_2": null}]
2             def            None

我希望它看起来像这样:

ID           Thing           Thing_2
1             abc            a
2             def            None

为此,我执行了以下步骤:

def change_to_dict(row):
t2 = row['Thing_2']
if pd.notna(row['Thing_2']):
t2 = t2.strip('[]') 
t2 = ast.literal_eval(t2)
return t2.get[0]

我一直得到一个value_error:索引处的节点格式不正确,它不为空。我认为这是因为字典中的第二个值为空值。

尝试:

import json
def change_to_dict(row):
t2 = row['Thing_2']
if pd.notna(t2):
t2_content = json.loads(t2)
return ','.join(filter(bool, t2_content[0].values()))

这应该有效。

import yaml
def change_to_dict(row):
if pd.notna(row):
t2 = row
t2 = t2.strip('[]')
t2 = yaml.load(t2)
return list(t2.values())[0]

df['Thing_2'].apply(lambda x: change_to_dict(x))

据我了解,我不知道这是否适合您。

数据帧:

>>> df
ID Thing                                Thing_2
0   1   abc  [{"object_1": "a", "object_2": null}]
1   2   def                                   None

输出:

您可以使用 re 模块来实现这一点,但您必须定义需要从列中提取的字符串/字符。

>>> search_list = ['a']
>>> import re
>>> df['Thing_2'] = df.Thing_2.str.extract('({})'.format('|'.join(search_list)), flags=re.IGNORECASE, expand=False).str.lower().fillna('None')
>>> df
ID Thing Thing_2
0   1   abc       a
1   2   def    None

如果您有一些字符串/单词要针对特定列(如a(进行搜索,这将很有价值。

相关内容

  • 没有找到相关文章

最新更新