如何将pandas列拆分为两个包含字符串和INT的列

2024-10-02 16:29:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望将列日期范围分为两列,开始日期和结束日期。但是,它似乎不起作用,因为它不识别“-”。有什么建议吗

enter image description here

我试着用

''' ebola1=pd.DataFrame(ebola['Date range'].str.split('-',1).to_list(),columns=['start Date','end Date'])) '''

但是,它返回以下内容:

enter image description here

因此(1)它不识别“-”(2)如何区分“1976年6月至11月”和“2001年10月至2002年3月”(3)如何在现有表格中包含新列

谢谢你的帮助


Tags: columnstodataframedaterangestart建议list
1条回答
网友
1楼 · 发布于 2024-10-02 16:29:06

这里使用了而不是-,因此使用^{}expand=True表示DataFrame

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']

然后^{}对于^{}测试的start date列中不存在的end date^{}之间的加法年:

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

相关问题 更多 >