TypeError:数组 dtype 和格式说明符不匹配。如何将具有不同值类型的数据框保存为 txt 文件?
Posted
技术标签:
【中文标题】TypeError:数组 dtype 和格式说明符不匹配。如何将具有不同值类型的数据框保存为 txt 文件?【英文标题】:TypeError: Mismatch between array dtype and format specifier. How to save a dataframe with different value types as a txt file? 【发布时间】:2021-03-15 21:13:16 【问题描述】:我有一个包含 10 列的数据框,每列包含不同类型的值: int,str,str,int,float,float,float,float,float,float
我想将我的 df 保存为 txt 文件。我使用此代码:
fmt = '%5f','%5s','%5s','%5f','%8.3f','%8.3f','%8.3f','%8.4f','%8.4f','%8.4f'
np.savetxt(r'C:\Users\np.txt', df.values, fmt=fmt, delimiter="")
但我收到此错误:
数组 dtype('object')和格式说明符('%5f%5s%5s%5f%8.3f%8.3f%8.3f%8.4f%8.4f%8.4f')不匹配
似乎每个值都需要相同的格式。
有什么方法可以将我的数据框保存为文本文件?
值的格式对我来说太重要了。遗憾的是,to_csv 会丢失格式。
提前致谢
梅尔努什
【问题讨论】:
你有什么理由不只是调用 df.to_csv 吗? 是的,我需要使用输出文件作为模拟软件的输入,它只读取文本文件。 to_csv 也可以保存为 .txt 文件。只需将文件名传递给方法,文本应该完全按照它在数据框中的显示方式保存 谢谢。当我使用 to_csv 时,.txt 文件会丢失格式 (fmt)。有哪些选项可以准确保存格式?df.values
是什么?形状和 dtype 开始。该错误暗示它是object
dtype。所有savetxt
正在做的是:fmt%tuple(row)
对于df.values
的每一“行”(纯python 字符串格式)关于values
数组的某些内容与您指定的fmt
字符串不兼容。
【参考方案1】:
如果没有为列的原始类型正确指定格式,则会引发此错误。考虑下面的例子
import pandas as pd
import numpy as np
d =
'col_str': ['a', 'b', 'c'],
'col_float': [1.5, 2.5, 0.7]
df = pd.DataFrame(d)
df
那么如果我尝试使用浮点格式保存 col_str
并使用字符串格式保存 col_float
TypeError
将引发
fmt = ['%5f', '%5s']
np.savetxt(r'test.txt', df.values, fmt=fmt, delimiter="")
>>> TypeError: Mismatch between array dtype ('object') and format specifier ('%5f%5s')
否则,如果正确指定格式,它将起作用
fmt = ['%5s', '%.2f']
np.savetxt(r'test.txt', df.values, fmt=fmt, delimiter="")
【讨论】:
谢谢。我将原始数据框中的“int”格式更改为“float”,它起作用了!虽然这些数字实际上是整数,对我来说没有任何意义。以上是关于TypeError:数组 dtype 和格式说明符不匹配。如何将具有不同值类型的数据框保存为 txt 文件?的主要内容,如果未能解决你的问题,请参考以下文章
GPT 2 - TypeError:无法根据规则“安全”将数组数据从 dtype('O') 转换为 dtype('int64')
TypeError:在绘制 seaborn.regplot 时,无法根据规则“安全”将数组数据从 dtype('int64') 转换为 dtype('int32')
pandas 比较引发 TypeError:无法将 dtyped [float64] 数组与 [bool] 类型的标量进行比较
Scipy hstack 导致“TypeError:类型不支持转换:(dtype('float64'),dtype('O'))”