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