<p>我的方法类似于@Anurag Dabas,但有<code>json.loads</code>:</p>
<pre class="lang-py prettyprint-override"><code>import pandas as pd
import numpy as np
import json
# load json data
# empty string and 'null' are valid json values
json_data = {
"PDH_Value": [
'{"roth": null, "pretax": null, "catchup": "false", "aftertax": null}',
'{"roth": null, "pretax": "true", "catchup": "true", "aftertax": null}',
'',
'{"roth": null, "pretax": "true", "catchup": "true", "aftertax": null}',
'{"roth": "true", "pretax": "true", "catchup": "true", "aftertax": "true"}',
'{"roth": "true", "pretax": "true", "aftertax": "true"}',
'null'
]}
df_merge = pd.DataFrame(json_data)
# replace empty strings or whitespace strings with NaN...
df_merge['PDH_Value'] = df_merge['PDH_Value'].replace(r'^\s*$', np.nan, regex=True)
# replace NaN-s with valid JSON with null value "catchup"
df_merge['PDH_Value'] = df_merge['PDH_Value'].fillna('{"catchup": null}')
# parse json values in the columns
df_merge['PDH_Value'] = df_merge['PDH_Value'].apply(json.loads)
# select only "catchup" property from the json if `x` is the dict and has `catchup` property
df_merge['PDH_Value'] = df_merge['PDH_Value'].apply(lambda x: x['catchup'] if type(x) == dict and 'catchup' in x else None)
print(df_merge)
>>> PDH_Value
>>> 0 false
>>> 1 true
>>> 2 None
>>> 3 true
>>> 4 true
>>> 5 None
>>> 6 None
</code></pre>