将月份名称和年份组合在一列中

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)

【讨论】:

以上是关于将月份名称和年份组合在一列中的主要内容,如果未能解决你的问题,请参考以下文章

如何在一列中为不同的组合框设置不同的商店?

r +中的时间序列图帮助需要组合月份和年份列

SQL 将 2 个表合并在一列中,以逗号分隔

Python:组合两列[重复]

如何将数据帧的2列组合到另一列中

如何从 DataFrame 的日期列中提取月份名称和年份