【问题标题】:How to split pandas column into two columns with strings and ints如何使用字符串和整数将熊猫列拆分为两列
【发布时间】:2020-10-05 07:05:30
【问题描述】:

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

我尝试过使用

''' ebola1 = pd.DataFrame(ebola['日期范围'].str.split('-',1).to_list(),columns = ['开始日期','结束日期']) '''

但是,它返回以下内容:

所以(1)它不识别“-”,(2)我如何区分“Jun-Nov 1976”和“Oct 2001-Mar 2002”,(3)我如何包含新列在现有表中?

感谢您的帮助!

【问题讨论】:

  • print (ebola['Date range'].head(20).tolist()) 是什么?
  • ['1976 年 6 月至 11 月'、'1976 年 9 月至 10 月'、'1977 年 6 月'、'1979 年 7 月至 10 月'、'1994 年 11 月'、'1994 年 11 月至 1995 年 2 月'、'1 月– 1995 年 7 月,“1996 年 1 月 – 3 月”,“1996 年 7 月 – 1997 年 1 月”,“2000 年 10 月 – 2001 年 2 月”,“2001 年 10 月 – 2002 年 3 月”,“2001 年 10 月 – 2002 年 3 月”,“2001 年 10 月 – 2002 年 3 月” '、'2001 年 10 月至 2002 年 3 月'、'2001 年 10 月至 2002 年 3 月'、'2002 年 12 月至 2003 年 4 月'、'2002 年 12 月至 2003 年 4 月'、'2002 年 12 月至 2003 年 4 月'、'2003 年 10 月至 12 月'、' 2004 年 4 月至 6 月']

标签: python pandas split multiple-columns


【解决方案1】:

使用 代替-,所以使用Series.str.splitexpand=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']

然后numpy.whereend dateSeries.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

【讨论】:

  • 谢谢!如果这一切都发生在一年内,有没有一种简单的方法可以添加年份。例如,1976 年 6 月至 11 月成为开始日期:1976 年 6 月和结束日期:1976 年 11 月,而不是开始日期:6 月结束日期:1976 年 11 月?我现在尝试使用 loc 创建一个循环。 (下一条评论中的代码)
  • for i in range(1, len(ebola)): ebola.loc[i, 'start date'] = ebola.loc[i, 'start date'] ebola.loc[i + 1, '结束日期'][1]
猜你喜欢
  • 1970-01-01
  • 2023-03-16
  • 2019-10-21
  • 2021-09-06
  • 2015-11-20
  • 1970-01-01
  • 2021-03-09
  • 2013-01-22
相关资源
最近更新 更多