<p>您可以尝试:</p>
<pre><code>df[["ClientToken"]].join(df.Data.apply(lambda x: pd.Series(json.loads(x[1:-1]))))
</code></pre>
<p><strong>解释</strong>:</p>
<ol>
<li>选择<code>Data</code>列并应用以下步骤:
<ol>
<li>因为“<code>Data</code>”内容被包装在一个列表中,这是一个字符串,所以我们可以使用<code>x[1:-1]</code>(删除第一个和最后一个字符)手动删除<code>[]</code></李>
<li>因为<code>"Data"</code>列是一个<code>string</code>,我们实际上需要一个<code>JSON</code>,所以我们需要转换它。一种解决方案是使用来自<a href="https://docs.python.org/fr/3/library/json.html" rel="nofollow noreferrer">^{<cd9>}</a>模块的<a href="https://docs.python.org/fr/3/library/json.html#json.loads" rel="nofollow noreferrer">^{<cd8>}</a>函数。代码变成<code>json.loads(x[1:-1])</code></li>
<li>然后,使用<code>pd.Series(json.loads(x[1:-1]))</code>将<code>dict</code>转换为<a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.html" rel="nofollow noreferrer">^{<cd12>}</a></li>
</ol></li>
<li>使用<a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.join.html" rel="nofollow noreferrer">^{<cd14>}</a>将这些新列添加到现有数据帧。另外,您会注意到我使用了double<code>[]</code>来选择<code>"ClientToken"</code>列作为数据帧</李>
</ol>
<hr/>
<p><strong>代码+插图</strong>:</p>
<pre class="lang-py prettyprint-override"><code>import pandas as pd
import json
# step 1.1
print(df.Data.apply(lambda x: x[1:-1]))
# 0 {"summaryId":"4814223456","duration":952,"star...
# 1 {"summaryId":"4814239586","duration":132,"star...
# Name: Data, dtype: object
# step 1.2
print(df.Data.apply(lambda x: json.loads(x[1:-1])))
# 0 {'summaryId': '4814223456', 'duration': 952, '...
# 1 {'summaryId': '4814239586', 'duration': 132, '...
# Name: Data, dtype: object
# step 1.3
print(df.Data.apply(lambda x: pd.Series(json.loads(x[1:-1]))))
# summaryId duration startTime
# 0 4814223456 952 1587442919
# 1 4814239586 132 1587443876
# step 2
print(df[["ClientToken"]].join(df.Data.apply(lambda x: pd.Series(json.loads(x[1:-1])))))
# ClientToken summaryId duration startTime
# 0 7a9ee887-8a09-ff9592e08245 4814223456 952 1587442919
# 1 bac49563-2cf0-cb08e69daa48 4814239586 132 1587443876
</code></pre>
<hr/>
<p>编辑1:</p>
<p>由于<code>Data</code>中的<code>list</code>似乎有一些行有多个<code>dicts</code>,您可以尝试:</p>
<pre><code>df[["ClientToken"]].join(df.Data.apply(lambda x: [pd.Series(y)
for y in json.loads(x)]) \
.explode() \
.apply(pd.Series))
</code></pre>