是否可以在不将其转换为字符串的情况下格式化数据框中的数字?

时间:2019-07-17 14:12:24

标签: python pandas dataframe numbers format

我想将数据框以xls格式导出​​到Excel,并以1000个分隔符和2个小数位显示数字,并以%的形式显示2个小数的百分比,例如54356为54,356.00,0.0345为3.45%

当我使用.map()和.format更改python中的格式时,它会在python中正确显示它们,但是它将它们转换为字符串,当我将它们导出到xls时,Excel不会将它们识别为数字/百分比。 / p>

import pandas as pd

d = {'Percent': [0.01, 0.0345], 'Number': [54464.43, 54356]}
df = pd.DataFrame(data=d)

df['Percent'] = pd.Series(["{0:.2f}%".format(val * 100) for val in df['Percent']], index = df.index)

df['Number'] = df['Number'].map('{:,.2f}'.format)

数据框看起来像预期的那样,但是单元格的类型现在是str,如果我将其导出到xls(df.to_excel('file.xls')),Excel将显示“此单元格中的数字已格式化文字或前面带有撇号的警告。

4 个答案:

答案 0 :(得分:0)

当您显示数据框时,您可以编辑样式属性,但基础数据不会被触摸

df.style.format({
    'Number': '{0:.2f}'.format, 
    'Percent': '{0:.2%}'.format,
})

请参阅:pandas style guide

答案 1 :(得分:0)

如果我正确理解了您的问题,那么您的目标是如何格式化输出excel文件中的实际单元格。为此,您可能需要专注于实际文件,而不是在pandas DataFrame中进行格式化(即您的数据正确,问题在于它们在输出中的显示方式)。

您可能要尝试使用this之类的东西。

答案 2 :(得分:0)

也许lambda会更有用

df['Percent'] = df['Percent'].apply(lambda x: round(x*100, 2))
df['Number'] = df['Number'].apply(lambda x: round(x, 2))

答案 3 :(得分:0)

  • 对于 df [“ Number”] df.Number = df.Number.apply(lambda x : '{0:,.2f}'.format(x))可以使用

  • 对于 df [“ Percent”] :首先将序列乘以100。df["Percent"] = df.Percent.multiply(100)

    • 然后使用df.Percent = df.Percent.apply(lambda x: "{0:.2f}%".format(x))

希望这会有所帮助