<p>数据帧基本上是二维结构。在单元格中放置列表或数组意味着在这些单元格中放置Python对象</p>
<p>要进行说明,请在一个单元格中创建一个包含数组的帧,在另一个单元格中创建一个列表:</p>
<pre><code>In [347]: df = pd.DataFrame([None,None], columns=['a'])
In [348]: df
Out[348]:
a
0 None
1 None
In [349]: df['a'][1]=[1,2,3]
In [350]: df['a'][0]=np.array([1,2,3])
In [351]: df
Out[351]:
a
0 [1, 2, 3]
1 [1, 2, 3]
</code></pre>
<p>保存它:</p>
<pre><code>In [355]: df.to_csv('pd.csv', index=False)
In [356]: cat pd.csv
a
[1 2 3]
"[1, 2, 3]"
</code></pre>
<p>数组已以<code>print/str</code>格式保存(带[],不带逗号)。列表也保存为字符串。它可以被引用,这样逗号就不会混淆默认的逗号分隔符</p>
<p><code>read_csv</code>将这两个单元格作为字符串加载。它不会尝试将它们转换回某种排序Python对象:</p>
<pre><code>In [357]: df1 = pd.read_csv('pd.csv')
In [358]: df1
Out[358]:
a
0 [1 2 3]
1 [1, 2, 3]
In [359]: type(df1['a'][0])
Out[359]: str
In [360]: type(df1['a'][1])
Out[360]: str
</code></pre>
<p>列表字符串可以轻松转换回字符串:</p>
<pre><code>In [361]: eval(df1['a'][1])
Out[361]: [1, 2, 3]
</code></pre>
<p>转换数组str需要更多的工作。该格式不用于重新创建数组。对于大型数组(超过1000项),它甚至会有省略号缺失值</p>
<p>在数据帧单元中放置阵列本身就很麻烦。这个保存/加载问题只是一个问题</p>