让我举个例子:
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
是Series
,但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__
但是可以打印df2
的值。
print('{:.2f}'.format(df2['a']))
0.00
我理解这是因为df1
是DataFrame
,df1['a']
是Series
,但是参数传递给format()
函数期待别的东西
而不是Series
个对象。所以我试着绕着这个笨拙地走来走去:
print('{:.2f}'.format(df1['a'].values[0]))
0.00
无论如何,这里的效率和pythnoic更高效吗?
答案 0 :(得分:1)
如果要将数据类型更改为str
,可以使用:
df = df[df['a'] == 0].astype(str)
结果print(df)
:
a b
0 0 1
数据类型print(df.dtypes)
:
a object
b object
dtype: object
如果要应用字符串格式,可以使用:
df = df[df['a'] == 0].applymap('{:,.2f}'.format)
结果print(df)
:
a b
0 0.00 1.00
数据类型print(df.dtypes)
:
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