Pandas 按预期对单个列应用工作,但不是整个数据帧



我有一个看起来像这样的数据帧:

pd.DataFrame({'state':['AL','AL'],'statefp':[1.0,1.0]})
  state  statefp
0    AL      1.0
1    AL      1.0

我想将整个数据帧转换为 str 类型,并且正在使用 .apply 方法。我想做的是,如果项目是 float 类型,我想将其存储为字符串整数,如果它已经是一个字符串,我想将其小写。我试过这个:

df.apply(lambda x: '{:.0f}'.format(x) if isinstance(x,float) else x.astype(str).str.lower())

它输出这个(不是我想要的,因为statefp存储为字符串浮点数):

  state statefp
0    al     1.0
1    al     1.0

但是,当我仅在该列上使用相同的应用程序时,它可以正常工作:

>>>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' .apply的参数,但这也没有用。

另外,我愿意尝试其他代码,而不仅仅是.apply

尝试改用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

最新更新