TypeError: Mismatch between array dtype and format specifier. How to save a dataframe with different value types as a txt file?
TypeError: Mismatch between array dtype and format specifier. How to save a dataframe with different value types as a txt file?
我有一个包含 10 列的数据框,每列包含不同类型的值:
整数、海峡、海峡、海峡、海峡、浮动、浮动、浮动、浮动、浮动、浮动
我想将我的 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="")
但是我得到这个错误:
Mismatch between array dtype ('object') and format specifier ('%5f%5s%5s%5f%8.3f%8.3f%8.3f%8.4f%8.4f%8.4f')
似乎每个值都需要相同的格式。
有没有办法将我的数据框保存为文本文件?
值的格式对我来说太重要了。遗憾的是,to_csv 将丢失格式。
提前致谢
梅尔努什
如果未为列的原始类型正确指定格式,则会出现此错误。考虑以下示例
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="")
我有一个包含 10 列的数据框,每列包含不同类型的值: 整数、海峡、海峡、海峡、海峡、浮动、浮动、浮动、浮动、浮动、浮动
我想将我的 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="")
但是我得到这个错误:
Mismatch between array dtype ('object') and format specifier ('%5f%5s%5s%5f%8.3f%8.3f%8.3f%8.4f%8.4f%8.4f')
似乎每个值都需要相同的格式。
有没有办法将我的数据框保存为文本文件?
值的格式对我来说太重要了。遗憾的是,to_csv 将丢失格式。
提前致谢
梅尔努什
如果未为列的原始类型正确指定格式,则会出现此错误。考虑以下示例
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="")