Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.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 数据帧/系列值格式问题_Python_Pandas - Fatal编程技术网

Python 数据帧/系列值格式问题

Python 数据帧/系列值格式问题,python,pandas,Python,Pandas,让我举一个例子: df = pd.DataFrame(np.arange(6).reshape(3, 2), columns=list('ab')) print(df) a b 0 0 1 1 2 3 2 4 5 比如说,我想选择一个列为'a'==0的行,我知道在我的数据帧中只有一行满足这个条件 df1 = df.loc[df['a'] == 0] print(df1) a b 0 0 1 type(df1) pandas.core.frame.DataFra

让我举一个例子:

df = pd.DataFrame(np.arange(6).reshape(3, 2), columns=list('ab'))
print(df)

   a  b
0  0  1
1  2  3
2  4  5
比如说,我想选择一个列为'a'==0的行,我知道在我的数据帧中只有一行满足这个条件

df1 = df.loc[df['a'] == 0]
print(df1)
   a  b
0  0  1
type(df1)
pandas.core.frame.DataFrame

df2 = df.loc[0]
print(df2)
a    0
b    1
Name: 0, dtype: int32
type(df2)
pandas.core.series.Series
如您所见,
df1
是一个
DataFrame
实例,但是
df2
是一个
系列
,尽管
df1
只有一行

现在,当我尝试格式化
df1
的值时,问题出现了:

print('{:.2f}'.format(df1['a']))
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-92-62c2a3e8dbc0> in <module>()
----> 1 print('{:.2f}'.format(df1['a']))

TypeError: unsupported format string passed to Series.__format__
我理解这是因为
df1
是一个
DataFrame
df1['a']
将是一个
系列
,但传递给
format()
函数的参数需要其他参数 而不是一个
系列
对象。所以我试着笨拙地绕着这条路走:

print('{:.2f}'.format(df1['a'].values[0]))
0.00

这里是否有更有效和更具pythnoic的方法?

如果要将数据类型更改为
str
,可以使用:

df = df[df['a'] == 0].astype(str)
df = df[df['a'] == 0].applymap('{:,.2f}'.format)
结果
打印(df)

数据类型
打印(df.dtypes)


如果要应用字符串格式,可以使用:

df = df[df['a'] == 0].astype(str)
df = df[df['a'] == 0].applymap('{:,.2f}'.format)
结果
打印(df)

数据类型
打印(df.dtypes)


下一个解决方案不会更改数据

pattern = '{:,.2f}'.format
print df.to_string(formatters={'a': pattern, 'b': pattern})
输出:

     a    b
0 0.00 1.00
1 2.00 3.00
2 4.00 5.00

是否尝试将所有值格式化为字符串?还是转换成浮动汇率?谢谢。只是我从另一个数据框中选择了几行数据框,我想打印出2位小数的数值。不打算更改数据类型。@StayFoolish,我添加了第三个版本,它不会更改数据类型。
a    object
b    object
dtype: object
pattern = '{:,.2f}'.format
print df.to_string(formatters={'a': pattern, 'b': pattern})
     a    b
0 0.00 1.00
1 2.00 3.00
2 4.00 5.00