Pandas按预期应用于各个列,但不是整个数据帧

时间:2017-10-19 17:27:14

标签: python pandas apply

我的数据框看起来像这样:

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

1 个答案:

答案 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