列拆分为两个单独的列

Column split into two separate columns

我正在尝试将 Period 列拆分为两个不同的列。第一个是季度,第二个是相应的年份。

import pandas as pd
df = pd.DataFrame({'Period': ["Q3'16", "Q1'17", "Q2'17","Q3'17"]})

dtype: 对象

结果应如下所示:

df = pd.Dataframe({'Quarter': ['Q3', 'Q1', 'Q2','Q3'],
'Year': ['2016','2017','2017','2017']})

因为这不属于任何时间戳格式。我在解决这个问题时遇到了一些困难。

作为参考,我的原始 df 看起来像这样。该列是对象类型。

使用 Series.str.extract 将句点转换为日期时间并提取 year:

dates = pd.to_datetime(df['Period'].replace(r"(Q\d)'(\d+)", r'-', regex=True))

df['Quarter'] = df['Period'].str.extract(r"(Q\d)")
df['Year']  = dates.dt.strftime('%Y')

或者如果所有年份都大于 2000 使用 str.extract:

df['Quarter'] = df['Period'].str.extract(r"(Q\d)")
df['Year']  = '20' + df['Period'].str.extract(r"'(\d+)")

Series.str.split的解决方案:

s = df['Period'].str.split("'")
df['Quarter'] = s.str[0]
df['Year']  = '20' + s.str[1]

选择:

df[['Quarter','Year']] = df['Period'].str.split("'", expand=True)
df['Year']  = '20' + df['Year']

print (df)
  Period Quarter  Year
0  Q3'16      Q3  2016
1  Q1'17      Q1  2017
2  Q2'17      Q2  2017
3  Q3'17      Q3  2017
    
import pandas as pd
df = pd.DataFrame({'Period': ["Q3'16", "Q1'17", "Q2'17","Q3'17"]})
df = pd.DataFrame(df.Period.str.split("'",1).tolist(),
                             columns = ['Quarter','Year'])
df["Year"] = "20"+df["Year"] 
print(df)