我有一个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
不是保存包含数组或列表等对象作为元素的数据帧的好格式。它只适用于简单数字和字符串元素。