df.apply()之后如何返回数据帧

时间:2019-03-18 06:28:01

标签: python pandas dataframe

假设我有一个熊猫数据框df

[In] df = pd.read_csv('data.csv')

由于列为空,我删除了df的最后两列

[In] csv_df.drop(csv_df.columns[-2:], axis = 1, inplace=True)
[In] print(type(csv_df[csv_df.columns[2:]]))

返回数据结构为

[Out] <class 'pandas.core.frame.DataFrame'>

但是,当我用df.apply()处理所有x的内容时,返回类型更改为pandas系列。

# replace comma
[In] csv_df = csv_df[csv_df.columns[2:]].apply(lambda x: str(x).replace(',','.'))
[In] print(type(csv_df))
[Out] <class 'pandas.core.series.Series'>

我已经检查了apply()的熊猫官方网站,它说它可以返回序列或数据框。

  

返回:已应用:系列或DataFrame

我的问题是

如何在df.apply()之后将数据结构保留为pandas数据框?

谢谢!

2 个答案:

答案 0 :(得分:3)

您可以在此处使用与DataFrame一起使用的操作-DataFrame.astype转换为stringDataFrame.replace

csv_df = csv_df[csv_df.columns[2:]].astype(str).replace(',','.')

如果需要解决方案,尤其是通过某些仅在Series中工作的功能进行工作时,

csv_df = csv_df[csv_df.columns[2:]].apply(lambda x: x.astype(str).str.replace(',','.'))

功能str.lower仅在Series中起作用:

csv_df = csv_df[csv_df.columns[2:]].apply(lambda x: x.astype(str).str.lower().str.replace(',','.'))

答案 1 :(得分:1)

如果这有帮助,只需传递result_type ='expand'

df.apply(lambda x: [4, 7], axis=1, result_type='expand')