我有一个列表,我将生成一个数据帧,其值在右边有0,如1.257000
,所以我需要将其生成为字符串,因为作为一个数字,右边的这些零消失了,我该如何继续?
我试图识别第5列(值所在的位置):
b = [
['string 1', 'string 2', 'string 3', 'string 4', 1.257000, 'string 6'],
['string 1', 'string 2', 'string 3', 'string 4', 1.546440, 'string 6']
]
df = pd.DataFrame(b, dtype={5: str})
df = pd.DataFrame(b, dtype={'5': str})
仅使用pd.DataFrame(b)
时第5列的当前结果:
1.257
1.54644
第5列的预期结果:
1.257000
1.546440
Zaero Divide生成的响应后的附加注释:
在我的情况下,数字可以在大小上变化,它可以是1.230
1.23000
1.2300000
,所以我不能通过在创建DataFrame后为所有指定相同的最终字符数来格式化。
这里的问题是b的输出是:
[
['string 1', 'string 2', 'string 3', 'string 4', 1.257, 'string 6'],
['string 1', 'string 2', 'string 3', 'string 4', 1.54644, 'string 6']
]
瞬间,那些0就不复存在了。
如果你有一个字符串/文件看起来像:
string 1,string 2,string 3,string 4,1.257000,string 6
string 1,string 2,string 3,string 4,1.546440,string 6
那么它可以读成你想要的样子:
file = """string 1,string 2,string 3,string 4,1.257000,string 6
string 1,string 2,string 3,string 4,1.546440,string 6"""
pd.read_csv(StringIO(file), dtype=str, header=None)
输出:
0 1 2 3 4 5
0 string 1 string 2 string 3 string 4 1.257000 string 6
1 string 1 string 2 string 3 string 4 1.546440 string 6
如果您希望末尾为零,可以使用格式字符串,例如:
>>> df[4].transform(lambda x: f"{x:0.6f}")
0 1.257000
1 1.546440
Name: 4, dtype: object
如果你想应用于所有表示:
>>> pd.options.display.float_format = '{:,.8f}'.format
>>> df[4]
0 1.25700000
1 1.54644000
Name: 4, dtype: float64
编辑只要数字作为数字引入,后面的零就会自动删除。它们应该作为字符串引入。从float
到str
的转换不会带回原始的零数,因为对于python来说它们从来没有真正存在过