为了账号安全,请及时绑定邮箱和手机立即绑定

如何将 pandas 列拆分为带有字符串和整数的两列

如何将 pandas 列拆分为带有字符串和整数的两列

江户川乱折腾 2023-10-06 19:22:03
我希望将日期范围列分成两列,开始日期和结束日期。然而它的分割似乎不起作用,因为它不识别“-”。有什么建议吗?我尝试使用''' ebola1 = pd.DataFrame(ebola['日期范围'].str.split('-',1).to_list(),columns = ['开始日期','结束日期']) '''但是,它返回以下内容:因此,(1) 它无法识别“-”,(2) 如何区分“1976 年 6 月至 11 月”和“2001 年 10 月至 2002 年 3 月”,(3) 如何在现有列中包含新列桌子?谢谢您的帮助!
查看完整描述

1 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

而是使用了,因此与for一起-使用:Series.str.splitexpand=TrueDataFrame

data = ['Jun–Nov 1976', 'Sep–Oct 1976', 'Jun 1977', 'Jul–Oct 1979', 'Nov 1994', 'Nov 1994–Feb 1995', 'Jan–Jul 1995', 'Jan–Mar 1996', 'Jul 1996–Jan 1997', 'Oct 2000–Feb 2001', 'Oct 2001–Mar 2002', 'Oct 2001–Mar 2002', 'Oct 2001–Mar 2002', 'Oct 2001–Mar 2002', 'Oct 2001–Mar 2002', 'Dec 2002–Apr 2003', 'Dec 2002–Apr 2003', 'Dec 2002–Apr 2003', 'Oct–Dec 2003', 'Apr–Jun 2004'] 


ebola = pd.DataFrame(data, columns=['Date range'])

ebola1 = ebola['Date range'].str.split('–', 1, expand=True)

ebola1.columns = ['start date','end date']

然后numpy.where添加来自end dateby的年份Series.str.extract,但前提是在start date测试的列中不存在Series.str.contains


mask = ebola1['start date'].str.contains('\d')

years = ebola1['end date'].str.extract('(\d+)', expand=False)

ebola1['start date'] = np.where(mask, 

                                ebola1['start date'], 

                                ebola1['start date'] + ' ' + years)

print (ebola1)


   start date  end date

0    Jun 1976  Nov 1976

1    Sep 1976  Oct 1976

2    Jun 1977      None

3    Jul 1979  Oct 1979

4    Nov 1994      None

5    Nov 1994  Feb 1995

6    Jan 1995  Jul 1995

7    Jan 1996  Mar 1996

8    Jul 1996  Jan 1997

9    Oct 2000  Feb 2001

10   Oct 2001  Mar 2002

11   Oct 2001  Mar 2002

12   Oct 2001  Mar 2002

13   Oct 2001  Mar 2002

14   Oct 2001  Mar 2002

15   Dec 2002  Apr 2003

16   Dec 2002  Apr 2003

17   Dec 2002  Apr 2003

18   Oct 2003  Dec 2003

19   Apr 2004  Jun 2004


查看完整回答
反对 回复 2023-10-06
  • 1 回答
  • 0 关注
  • 100 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信