<p>如果您的列包含每行上的列表,则不需要<code>.tolist()</code>将其转换为单独的列。你知道吗</p>
<p>这里有一种可能的方法来解决这个问题</p>
<p>生成一些虚拟数据</p>
<pre><code>import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(10,1), columns=list('A'))
df['category'] = 'Construction'
df['item'] = [[28,0,72168025]]*df.shape[0]
df['subcategory'] = 'tools'
print(df)
A category item subcategory
0 0.972818 Construction [28, 0, 72168025] tools
1 0.583059 Construction [28, 0, 72168025] tools
2 0.784836 Construction [28, 0, 72168025] tools
3 0.393868 Construction [28, 0, 72168025] tools
4 0.806041 Construction [28, 0, 72168025] tools
5 0.871041 Construction [28, 0, 72168025] tools
6 0.573951 Construction [28, 0, 72168025] tools
7 0.513052 Construction [28, 0, 72168025] tools
8 0.982331 Construction [28, 0, 72168025] tools
9 0.713301 Construction [28, 0, 72168025] tools
</code></pre>
<p>现在,在<code>item</code>列(<a href="https://stackoverflow.com/a/44298666">per this SO post</a>或<a href="https://stackoverflow.com/a/40924406/4057186">this one</a>)上使用<code>apply(pd.Series)</code>来获得一个单独的dataframe,其中每个list元素对应于一个单独的pandas序列,并分配列名</p>
<pre><code>df_split = df['item'].apply(pd.Series)
df_split.columns = ['Name', 'Price', 'View']
</code></pre>
<p>最后将原始数据帧与新的(拆分的)数据帧连接起来</p>
<pre><code>df = pd.concat([df, df_split], axis=1)
</code></pre>
<p>输出</p>
<pre><code>print(df)
A category item subcategory Name Price View
0 0.684692 Construction [28, 0, 72168025] tools 28 0 72168025
1 0.404291 Construction [28, 0, 72168025] tools 28 0 72168025
2 0.084463 Construction [28, 0, 72168025] tools 28 0 72168025
3 0.060698 Construction [28, 0, 72168025] tools 28 0 72168025
4 0.096269 Construction [28, 0, 72168025] tools 28 0 72168025
5 0.539278 Construction [28, 0, 72168025] tools 28 0 72168025
6 0.159661 Construction [28, 0, 72168025] tools 28 0 72168025
7 0.651479 Construction [28, 0, 72168025] tools 28 0 72168025
8 0.961392 Construction [28, 0, 72168025] tools 28 0 72168025
9 0.741887 Construction [28, 0, 72168025] tools 28 0 72168025
</code></pre>
<p>(可选)删除原始的<code>item</code>列</p>
<pre><code>df.drop(['item'], axis=1, inplace=True)
print(df)
A category subcategory Name Price View
0 0.833281 Construction tools 28 0 72168025
1 0.229584 Construction tools 28 0 72168025
2 0.403571 Construction tools 28 0 72168025
3 0.822803 Construction tools 28 0 72168025
4 0.968666 Construction tools 28 0 72168025
5 0.053424 Construction tools 28 0 72168025
6 0.759824 Construction tools 28 0 72168025
7 0.766610 Construction tools 28 0 72168025
8 0.752378 Construction tools 28 0 72168025
9 0.056715 Construction tools 28 0 72168025
</code></pre>
<p>编辑:虽然这种方法是可行的,但是有比使用<code>apply</code>更快的方法-参见<a href="https://stackoverflow.com/a/54432584/4057186">here</a>。你知道吗</p>