【问题标题】:Loss of numpy array dimensions when save and retrieve from csv file using pandas使用 pandas 从 csv 文件保存和检索时丢失 numpy 数组维度
【发布时间】:2021-02-20 20:17:09
【问题描述】:

我有一个 numpy.array 数据类型,我想用 pandas 将它写入一个 .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]

为什么会这样?我该如何解决这个问题?

【问题讨论】:

    标签: python pandas numpy csv


    【解决方案1】:
    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 生成一个二维数组,这里有 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 不是保存包含对象(如数组或列表)作为元素的数据帧的好格式。它只适用于简单数字和字符串的元素。

    【讨论】:

      猜你喜欢
      • 2015-07-29
      • 2015-05-16
      • 1970-01-01
      • 2016-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-27
      • 1970-01-01
      相关资源
      最近更新 更多