Python 在pandas中,如何在单个单元格中设置数字格式?
在pandas中,可以使用Python 在pandas中,如何在单个单元格中设置数字格式?,python,pandas,Python,Pandas,在pandas中,可以使用map或applymap显示一组整数或浮点数,使其看起来像典型的数字格式。例如 df['Big_num'] = df['Big_num'].map('{:,.0f}'.format) 。。。将包含123456.789的列转换为看起来更好的字符串:123457 我正在使用一个应用程序,在这个应用程序中,用户将执行一些操作,并使数据帧中的单个单元格重新计算。因此,给定行中的“Number”将返回为float,然后需要重新格式化 在这种情况下,您不能使用map功能,因为大多
map
或applymap
显示一组整数或浮点数,使其看起来像典型的数字格式。例如
df['Big_num'] = df['Big_num'].map('{:,.0f}'.format)
。。。将包含123456.789的列转换为看起来更好的字符串:123457
我正在使用一个应用程序,在这个应用程序中,用户将执行一些操作,并使数据帧中的单个单元格重新计算。因此,给定行中的“Number”将返回为float,然后需要重新格式化
在这种情况下,您不能使用map
功能,因为大多数列都是字符串。它将抛出一个值错误。以下是我尝试做的玩具版本:
import pandas as pd
import numpy as np
df_data = {'Location' : ['Denver', 'Boulder', 'San Diego', 'Reno', 'Portland',
'Eugene', 'San Francisco'], 'State' : ['co', 'co', 'ca', 'nv',
'or', 'or', 'ca'], 'Rando_num': [18.56, 5.12, 34.87, 11.22, 72.68, 42.90, 9.38],
'Other_num': [113, 260, 557, 134, 883, 422, 22]}
df = pd.DataFrame(data = df_data)
df['Big_num'] = df['Rando_num'] * df['Other_num']
df['Big_num'] = df['Big_num'].map('{:,.0f}'.format)
print(df)
add_num = input('Type a number to add to row 3 ')
df.loc[3, 'Big_num'] = df.loc[3, 'Rando_num'] * df.loc[3, 'Other_num'] + float(add_num)
#Neither of these work
#df.loc[3, 'Big_num'] = df.loc[3, 'Big_num'].map('{0:.2f}%'.format)
#df.loc['Big_num'] = df['Big_num'].map('{0:.2f}%'.format)
print(df)
我在寻找[3,‘Big_num’]的销量应该是这样的输出
1503
有什么想法吗?提前感谢。您的问题是无法运行
df['Big_num']=df['Big_num'].map('{:,.0f}.format)
两次。即使只是一次又一次
我还建议使用df.update
以下是一些工作代码:
import pandas as pd
import numpy as np
df_data = {'Location' : ['Denver', 'Boulder', 'San Diego', 'Reno', 'Portland',
'Eugene', 'San Francisco'], 'State' : ['co', 'co', 'ca', 'nv',
'or', 'or', 'ca'], 'Rando_num': [18.56, 5.12, 34.87, 11.22, 72.68, 42.90, 9.38],
'Other_num': [113, 260, 557, 134, 883, 422, 22]}
df = pd.DataFrame(data = df_data)
df['Big_num'] = df['Rando_num'] * df['Other_num']
#dm = df.copy() #If you want to print twice, uncomment these 3 lines.
#dm['Big_num'] = dm['Big_num'].map('{:,.0f}'.format)
#print(dm)
add_num = input('Type a number to add to row 3 ')
new_num = df.loc[3, 'Rando_num'] * df.loc[3, 'Other_num'] + float(add_num)
new_num = int(new_num)
new_col = pd.Series([new_num], name='Big_num', index=[3])
df.update(new_col)
df['Big_num'] = df['Big_num'].map('{:,.0f}'.format)
print(df)
只需将字符串格式应用于标量即可。针对按标签访问和设置标量值进行了优化
add_num = float(input('Type a number to add to row 3 ')) # 123
df.at[3, 'Big_num'] = '{:,.0f}'.format(df.at[3, 'Rando_num'] *
df.at[3, 'Other_num'] + add_num)
print(df)
# Location State Rando_num Other_num Big_num
# 0 Denver co 18.56 113 2,097
# 1 Boulder co 5.12 260 1,331
# 2 San Diego ca 34.87 557 19,423
# 3 Reno nv 11.22 134 1,626
# 4 Portland or 72.68 883 64,176
# 5 Eugene or 42.90 422 18,104
# 6 San Francisco ca 9.38 22 206
也许只需使用
pd.options.display.float_format='{:,.0f}'。format
改变显示方式,而不是将其转换为字符串。同意转换为字符串是次优解决方案。管理显示vis配置或显式使用.to_html
method@AChampion如果我想让所有的浮动看起来都一样,那就行了。我也有一些百分比,然后您可以使用df.to_string()
或df.style
来描述每列的格式化程序,例如print(df.to_string(formatters={'Big_num':'{:,.0f}'。format})
。这非常适合我的特定用例,尽管@Rorshach的代码也可以工作。谢谢