分隔列中的相邻值以拆分它们[Python-Pandas]

分隔列中的相邻值以拆分它们[Python-Pandas],python,pandas,Python,Pandas,在我的数据框中有一列[date\u time/full\u company\u name],其中包含日期、时间和公司名称。我想将该列拆分为两列,一列显示日期和时间,另一列显示公司名称-问题是,它们直接相邻,例如 [2011-11-19 12:22:10Anderson-Henderson] 因此,我最初的想法是使用以下代码: split = df[['date_time', 'full_company_name']] = df['date_time/full_company_name'].st

在我的数据框中有一列[date\u time/full\u company\u name],其中包含日期、时间和公司名称。我想将该列拆分为两列,一列显示日期和时间,另一列显示公司名称-问题是,它们直接相邻,例如

[2011-11-19 12:22:10Anderson-Henderson]
因此,我最初的想法是使用以下代码:

split = df[['date_time', 'full_company_name']] = df['date_time/full_company_name'].str.split('/', n=1, expand=True)
返回2列,但其中一列包含所有信息,第二列不包含值。
如何在初始数据框中的日期和公司名称之间插入“/”以利用这种拆分?还是总的来说有更简单的方法?

我希望您能找到更好的解决方案,但在您找到之前,我已经找到了一个有效的解决方案

按“:”拆分为多个列,然后从“名称”列中提取秒数,并将其移到“日期”列

df[['date', 'hour', 'name']] = df["col"].str.split(':', expand=True)
df['date'] = df['date'] + ":" + df['hour'] + ":" + df['name'].str[:2]
df['name'] = df['name'].str[2:]
输出:

col                                     date                 name
2011-11-19 12:22:10Anderson-Henderson   2011-11-19 12:22:10 Anderson-Henderson

我希望你能找到一个更好的解决办法,但在你找到之前,我已经想出了一个有效的办法

按“:”拆分为多个列,然后从“名称”列中提取秒数,并将其移到“日期”列

df[['date', 'hour', 'name']] = df["col"].str.split(':', expand=True)
df['date'] = df['date'] + ":" + df['hour'] + ":" + df['name'].str[:2]
df['name'] = df['name'].str[2:]
输出:

col                                     date                 name
2011-11-19 12:22:10Anderson-Henderson   2011-11-19 12:22:10 Anderson-Henderson

您也可以通过字符串切片来完成此操作:

所以首先使用
astype()
方法和
strip()
方法:

df['date_time/full_company_name']=df['date_time/full_company_name'].astype(str).str.strip('[]')
最后指定列:

df['date_time']=df['date_time/full_company_name'].str[1:20]
df['full_company_name']=df['date_time/full_company_name'].str[20:-1]
现在,如果您打印
df
,您将获得:

    date_time/full_company_name                date_time            full_company_name
0   '2011-11-19 12:22:10Anderson-Henderson'   2011-11-19 12:22:10   Anderson-Henderson
1   '2011-11-19 12:22:10Anderson-Henderson'   2011-11-19 12:22:10   Anderson-Henderson

您也可以通过字符串切片来完成此操作:

所以首先使用
astype()
方法和
strip()
方法:

df['date_time/full_company_name']=df['date_time/full_company_name'].astype(str).str.strip('[]')
最后指定列:

df['date_time']=df['date_time/full_company_name'].str[1:20]
df['full_company_name']=df['date_time/full_company_name'].str[20:-1]
现在,如果您打印
df
,您将获得:

    date_time/full_company_name                date_time            full_company_name
0   '2011-11-19 12:22:10Anderson-Henderson'   2011-11-19 12:22:10   Anderson-Henderson
1   '2011-11-19 12:22:10Anderson-Henderson'   2011-11-19 12:22:10   Anderson-Henderson

这在大多数情况下都非常有效,但是如果date\u time/full\u company\u name列中缺少值,会怎么样?因为它会将公司名称放在该列中-你认为有什么办法可以解决这个问题吗?它会将“company\u name”放在“date\u time”列中?是的,但只有当日期时间列为空时,才将
to\u datetime()
方法中的
errors
参数传递给…即
df['date\u time']=pd.to\u datetime(df['date\u time',errors='concurve')
这在大多数情况下都非常有效,但如果date\u time/full\u company\u name列中缺少值怎么办,因为它然后将公司名称放入此列中-你认为有什么办法吗?它将“公司名称”放入“日期时间”列中?是的,但仅当日期时间列为空时才传递
errors
参数到
to\u datetime()
方法…即
df['date\u time']=pd.to\u datetime(df['date\u time'],errors='concurve'))