使用panda保存和检索csv文件时,numpy数组维度丢失



我有一个numpy.array数据类型,我想用panda把它写到.csv文件中,所以我运行这个:

data = numpy.array([1, 2, 3, 4, 5, 6])
print(data)
print((data.shape))
df = pd.DataFrame(columns = ['content'])
df.loc[0, 'content'] = data
df.to_csv('data.csv', index = False)
print(df.head())
>>> [1 2 3 4 5 6]
>>> (6,)
>>>                content
0  [1, 2, 3, 4, 5, 6]

如输出中所示,numpy数组的维度为(6,(
但问题是,当我从.csv文件数组中检索它时,维度丢失并更改为((

data = pd.read_csv('data.csv')
val = numpy.array(data['content'][0])
print(val.shape)
print(val)
>>> ()
>>> [1 2 3 4 5 6]

为什么会发生这种情况?我该如何解决这个问题?

In [46]: import pandas as pd
In [47]: data = np.arange(1,7)
In [48]: data.shape
Out[48]: (6,)

原始数据帧:

In [49]: df = pd.DataFrame(columns = ['content'])
...: df.loc[0, 'content'] = data
In [50]: df
Out[50]: 
content
0  [1, 2, 3, 4, 5, 6]
In [52]: df.to_numpy()
Out[52]: array([[array([1, 2, 3, 4, 5, 6])]], dtype=object)

来自数据帧的to_numpy生成一个2d数组,这里有1个元素,该元素是数组ifself。

In [54]: df.to_numpy()[0,0]
Out[54]: array([1, 2, 3, 4, 5, 6])

查看完整的文件,而不仅仅是标题:

In [55]: df.to_csv('data.csv', index = False)
In [56]: cat data.csv
content
[1 2 3 4 5 6]

第二行是str(data)显示-带有[],没有逗号

read_csv将其作为字符串加载。它不会尝试将其转换为数组;它不能。

In [57]: d = pd.read_csv('data.csv')
In [58]: d
Out[58]: 
content
0  [1 2 3 4 5 6]
In [59]: d.to_numpy()
Out[59]: array([['[1 2 3 4 5 6]']], dtype=object)
In [60]: d.to_numpy()[0,0]
Out[60]: '[1 2 3 4 5 6]'

csv不是保存包含数组或列表等对象作为元素的数据帧的好格式。它只适用于简单数字和字符串元素。

最新更新