Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在pandas中,如何在单个单元格中设置数字格式?_Python_Pandas - Fatal编程技术网

Python 在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功能,因为大多

在pandas中,可以使用
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的代码也可以工作。谢谢