【问题标题】:How to read a numpy array float value without change its format?如何在不更改格式的情况下读取 numpy 数组浮点值?
【发布时间】:2021-03-05 04:58:52
【问题描述】:

我正在使用 pandas 和 numpy 进行特征提取。完成这个任务需要很长时间,所以我想保存 DataFrame 以备后用。

我将一个包含多个二维 numpy 数组的大型 pandas.Dataframe 写入 csv 文件。这些单元格值是这样的:

        color                 contrast            dissimilarity  \
0  134.000000                  [[0.0]]                  [[0.0]]   
1  135.133333  [[0.16000000000000003]]  [[0.16000000000000003]]

然后我从csv文件中读取数据,浮点数的格式变成了这样:

    color  contrast dissimilarity  
0  134.00    [[0.]]        [[0.]]       
1  135.13  [[0.16]]      [[0.16]]    

浮点值“0.0”变为“0”。 .因此,当我使用从 csv 文件中读取的数据框作为模型的参数时,它会引发错误:

ValueError: could not convert string to float: '[[0.]]'

这就是我将 df 写入 csv 文件的方式: 从日期时间导入日期时间

now = datetime.now()

current_time = now.strftime("%x%H:%M:%S")
print("Current Time =", current_time)
current_time = current_time.replace(':', '')
current_time = current_time.replace('/', '')

compression_opts = dict(method='zip', archive_name= current_time + '.csv') 
df.to_csv(current_time + 'test.zip', index=False, compression=compression_opts)  

这就是我读取文件的方式

df2 = pd.read_csv('112220153048.csv', sep=',')

有没有办法在将数据写入cvs文件时不改变数字格式?

【问题讨论】:

  • 这与0.00. 无关。该错误是因为 read_csv 根本不理解数组。
  • 如果您想在 DataFrame 单元格中存储 NumPy 数组等复杂对象,CSV 不是您应该用来序列化 DataFrame 的格式。
  • @user2357112supportsMonica 那么我将使用什么格式??

标签: python pandas numpy csv


【解决方案1】:

csv 文件正在将每个元素转换为字符串,因为它无法像 numpy 那样识别括号。我能想到两种解决方案。

一个更hacky,而且有点丑。如果您必须使用 csv,那么您可以尝试解析每个元素,将括号切掉。

element = "[[0.1]]"
float_from_element = float(element[2:-2])
>>> 0.1

我的第二个建议是使用pickle 来保存数据,而不是将其保存为 csv 文件。如果您只在 python 上处理数据帧并且不需要读取它之外的 csv,这可能会很有用。 pickle 包会将数据帧或a series of chunks 保存为可以保存在硬盘上的二进制文件。然后,当您加载 pickle 文件时,它将作为 python 对象加载,这会将其属性保存为 pandas 数据框或 numpy 数组。

我认为 pandas 原生支持 pickle,read this link

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多