Python 使用自定义函数将dataframe中的许多列解析/拆分为多个列
我已经查阅了很多以前相关的SO帖子,但我无法修改它们来解决我的问题 下面是一个数据帧示例Python 使用自定义函数将dataframe中的许多列解析/拆分为多个列,python,pandas,dataframe,parsing,split,Python,Pandas,Dataframe,Parsing,Split,我已经查阅了很多以前相关的SO帖子,但我无法修改它们来解决我的问题 下面是一个数据帧示例 #使用pandas 0.24.2 数据={'customer_id':[1,2,3], “上一个到期日”:[“2010年6月”、“2019年4月”、“1999年12月], “当前到期日”:[“2019年8月”、“2045年12月”、“2000年1月], ‘下一个到期日’:[‘2025年2月’、‘2065年11月’、‘2001年9月’] } df=pd.DataFrame(数据) 这里是dataframe
#使用pandas 0.24.2
数据={'customer_id':[1,2,3],
“上一个到期日”:[“2010年6月”、“2019年4月”、“1999年12月],
“当前到期日”:[“2019年8月”、“2045年12月”、“2000年1月],
‘下一个到期日’:[‘2025年2月’、‘2065年11月’、‘2001年9月’]
}
df=pd.DataFrame(数据)
这里是dataframe的外观,在实际的dataframe中还有更多这样的列需要解析,因此我的问题是
客户id上一个到期日当前到期日下一个到期日
0 2010年6月1日2019年8月2025年2月
2019年4月2日2045年12月2065年11月
2 1999年12月3日2000年1月2001年9月
我创建了一个函数来解析一列(即,这将向提供的df添加两个解析的列——月和年列)
def parse_列(df,col_parse):
col_parse_mmm=col_parse+'_mmm'
col_parse_yyy=col_parse+'_yyy'
df[[col_parse_mmm,col_parse_yyyy]]=df[col_parse].str.split('-',expand=True)
返回df
在下面调用此函数会对提供的列执行以下操作:
parse_列(df,'prev_due_date')
现在,我的问题是:
for c in my_columns_list:
parse_column(df, c)
你不需要任何
应用
我想主要的问题是你为什么需要这样做?如果您可以操纵日期,那么有更好的方法来存储此信息,而无需跨数百列复制数据。为什么不在列中使用pd.to_datetime
,以及在需要月份时使用,您使用.dt.month`acessor?@ALollz我在示例中选择的日期列可能会产生误导。实际上,我想解析任意数量的字符列,比如带有city和zip的full address,但在我的示例中,我碰巧选择了date列。当您声明“您不需要在parse_column函数中返回df”时,您的意思是什么?如果我的parse_column函数没有返回带有两个已命名已解析列的df,您的意思是返回通用的“0”和“1”列吗?您不需要返回任何内容。参数通过赋值传递。调用函数parse_列(df,c)
时,创建对df
的引用,并通过值将该引用传递给函数。您可以说服自己,但在函数之前、内部和之后都添加一个打印(id(df))
:所有id都是相同的。另见。
for c in my_columns_list:
parse_column(df, c)