我的数据框看起来像这样:
pd.DataFrame({'state':['AL','AL'],'statefp':[1.0,1.0]})
state statefp
0 AL 1.0
1 AL 1.0
我想将整个数据框转换为str类型并使用.apply
方法。我想要做的是如果项目是float类型,我想将它存储为字符串 integer ,如果它已经是一个字符串我想要小写它。我试过这个:
df.apply(lambda x: '{:.0f}'.format(x) if isinstance(x,float) else x.astype(str).str.lower())
哪个输出(不是我想要的,因为statefp
存储为字符串 float ):
state statefp
0 al 1.0
1 al 1.0
但是,当我在该列上使用相同的apply时,它可以正常工作:
>>>df.statefp.apply(lambda x: '{:.0f}'.format(x) if isinstance(x,float) else x.astype(str).str.lower())
0 1
1 1
我是否遗漏了.apply
如何处理整个数据框的问题?我也试过设置axis='columns'
的{{1}}参数,但这也不起作用。
此外,我愿意尝试其他代码,而不只是.apply
。
答案 0 :(得分:0)
尝试改用dtype:
df.apply(lambda x: x.astype(int).astype(str) if x.dtype==np.float else x.astype(str).str.lower())
输出:
state statefp
0 al 1
1 al 1
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2 entries, 0 to 1
Data columns (total 2 columns):
state 2 non-null object
statefp 2 non-null object
dtypes: int32(1), object(1)
memory usage: 104.0+ bytes