我有一个看起来像这样的数据帧(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
(进行搜索,这将很有价值。