【问题标题】:Column split into two separate columns列拆分为两个单独的列
【发布时间】:2021-10-26 04:31:38
【问题描述】:

我正在尝试将我的 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 看起来像这样。列是对象类型。

【问题讨论】:

  • 您提供的代码有一些错误。首先,像这样创建数据框会导致错误,因为您应该在句点中使用双引号,因为字符串中有 ' 字符。
  • 是的菜鸟错误。

标签: python pandas datetime datetime-format


【解决方案1】:

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

dates = pd.to_datetime(df['Period'].replace(r"(Q\d)'(\d+)", r'\2-\1', 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
    

【讨论】:

    【解决方案2】:
    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-11
      • 1970-01-01
      • 1970-01-01
      • 2018-06-25
      • 2021-03-27
      • 1970-01-01
      • 2015-04-03
      • 1970-01-01
      相关资源
      最近更新 更多