将list转换为具有特定列(没有名称)的DataFrame作为字符串



我有一个列表,我将生成一个数据帧,其值在右边有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.2301.230001.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

编辑只要数字作为数字引入,后面的零就会自动删除。它们应该作为字符串引入。从floatstr的转换不会带回原始的零数,因为对于python来说它们从来没有真正存在过

最新更新