<p><code>pandas</code>实际上不<em>支持“子列”,正如您所要求的那样。不过,它确实支持以<code>{'a': {'b': 'value'}}</code>为您提供列<code>a.b = 'value'</code>的方式展平<code>json</code>对象。执行此操作的官方方法是<code>json_normalize</code>,并将像这样使用</p>
<pre class="lang-py prettyprint-override"><code>import pandas as pd
income_statement_history = {
"totalRevenue": {
"raw": 67985000,
"fmt": "67.98M",
"longFmt": "67,985,000"
},
"costOfRevenue": {
"raw": 0,
"fmt": 'null',
"longFmt": "0"
},
"grossProfit": {
"raw": 67985000,
"fmt": "67.98M",
"longFmt": "67,985,000"
},
"totalOperatingExpenses": {
"raw": 46790000,
"fmt": "46.79M",
"longFmt": "46,790,000"
},
"operatingIncome": {
"raw": 21195000,
"fmt": "21.2M",
"longFmt": "21,195,000"
}
}
df = pd.json_normalize(income_statement_history)
</code></pre>
<p>印刷<code>df</code>会给你</p>
<pre class="lang-py prettyprint-override"><code>>>> df
totalRevenue.raw totalRevenue.fmt totalRevenue.longFmt costOfRevenue.raw costOfRevenue.fmt ... totalOperatingExpenses.fmt totalOperatingExpenses.longFmt operatingIncome.raw operatingIncome.fmt operatingIncome.longFmt
0 67985000 67.98M 67,985,000 0 null ... 46.79M 46,790,000 21195000 21.2M 21,195,000
[1 rows x 15 columns]
</code></pre>
<p>您可以继续使用动态访问这些列值</p>
<pre class="lang-py prettyprint-override"><code>>>> col = 'totalOperatingExpenses'
>>> subcol = 'longFmt'
>>> df[f'{col}.{subcol}']
0 46,790,000
Name: totalOperatingExpenses.longFmt, dtype: object
</code></pre>
<hr/>
<p>根据@Ann Zen的回答,可以选择<code>pd.DataFrame</code>初始化,也可以选择您一直使用的任何方法,这取决于您的确切需求</p>
<p>您的目标是基于json数据的列的直观处理吗?您的目标是否是访问给定子列名称和基列名称的子列的明确方式?我能想到的大多数答案都是基于偏好的,差别很小</p>