将月份名称和年份组合在一列中
Posted
技术标签:
【中文标题】将月份名称和年份组合在一列中【英文标题】:Combine Month name and Year in one column 【发布时间】:2020-07-25 11:09:52 【问题描述】:我需要将月份名称和年份列以日期时间格式(日、月、年)合并到“月-年”列中。 NaN 和数据类型有问题。还需要为所有行指定默认日期为 1。
当前数据类型:
Month: (O)
Year: float64
df1=pd.DataFrame('Month':["January"," ","December","February"," "," ","March","July"],
'Year':["2020"," ","2017","2015"," "," ","2019","2015"])
最终数据帧
【问题讨论】:
【参考方案1】:试试:
df1 = df1.replace(r'\s+', np.nan, regex=True)
df1['Month-Year'] = pd.to_datetime(df1['Month']+ '-'+ df1['Year']).dt.strftime('%d/%m/%Y')
df1:
Month Year Month-Year
0 January 2020 01/01/2020
1 NaN NaN NaN
2 December 2017 01/12/2017
3 February 2015 01/02/2015
4 NaN NaN NaN
5 NaN NaN NaN
6 March 2019 01/03/2019
7 July 2015 01/07/2015
【讨论】:
您可以通过pd.to_datetime(df1.Month + df1.Year, errors='coerce').dt.strftime("%d/%m/%Y").replace("NaT", "")
避免正则表达式开销
收到错误can only concatenate str (not "float") to str
。当我将列转换为astype(str)
时,没有得到结果。它只是一系列数字
将年份列的类型更改为对象。
df['year'] = df['year'].astype(str)
【参考方案2】:
您可以做的一件事是创建一个列(月份整数),例如一月到 01,二月到 02,依此类推。然后使用此列和年列创建月-年列,然后如果需要,可以删除(月-整数)列。
【讨论】:
【参考方案3】:试试这个:
df1["date"] = pd.to_datetime(df1.Month, format='%B', errors='coerce').dt.date
df1.apply(lambda x: x.date.replace(year=int(float(x.Year))) if x.Year!= " " else "",axis=1)
【讨论】:
以上是关于将月份名称和年份组合在一列中的主要内容,如果未能解决你的问题,请参考以下文章