Python 将带有数字和名称的列拆分为两个不同的列';ID';和';名称';

Python 将带有数字和名称的列拆分为两个不同的列';ID';和';名称';,python,pandas,Python,Pandas,我正在将文本文件转换为csv。 在csv文件中,我得到一个列,其中有一个数字和名称(例如1:Aki),我想将它们分别放在两个不同的列中 样本数据 1: Aki 2: Aki 3: Kano 代码尝试 df_output.columns = ['Name', 'date', 'Description'] ###df_output['ID'],df_output['Name_'] = df_output['Name'].str[:1],df_output['Name'].str[1:] ob

我正在将文本文件转换为csv。 在csv文件中,我得到一个列,其中有一个数字和名称(例如1:Aki),我想将它们分别放在两个不同的列中

样本数据

1: Aki 
2: Aki
3: Kano
代码尝试

df_output.columns = ['Name', 'date', 'Description']

###df_output['ID'],df_output['Name_'] = df_output['Name'].str[:1],df_output['Name'].str[1:]

obj = df_output['Name']
obj = obj.str.strip()
obj = obj.str.split(':/s*')
df_output['Name'] = obj.str[-1]
df_output['idx'] = obj.str[0]
df_output = df_output.set_index('idx')

在此处使用
str.extract

df_输出['ID']=df['name'].str.extract(r'^(\d+))
df_输出['name']=df['name'].str.extract(r'^\d+:(.*)$)

使用
str.extract
此处:

df_输出['ID']=df['name'].str.extract(r'^(\d+))
df_输出['name']=df['name'].str.extract(r'^\d+:(.*)$)

您非常接近,只需更改一些语法即可。试试这个:

创建数据 干净数据 让我们删除空白,然后在
上拆分列:“
(冒号后跟空格)

将清理后的数据与原始数据相结合 现在,我们的数据很好且干净,我们可以
将其连接回原始数据帧:

final_df = df.join(clean_df)

print(final_df)
    column number  name
0   1: Aki      1   Aki
1   2: Aki      2   Aki
2  3: Kano      3  Kano
全部
你很接近,只需要改变一些语法。试试这个:

创建数据 干净数据 让我们删除空白,然后在
上拆分列:“
(冒号后跟空格)

将清理后的数据与原始数据相结合 现在,我们的数据很好且干净,我们可以
将其连接回原始数据帧:

final_df = df.join(clean_df)

print(final_df)
    column number  name
0   1: Aki      1   Aki
1   2: Aki      2   Aki
2  3: Kano      3  Kano
全部
修复代码后:

df = pd.DataFrame({'Name':['1: Aki','2: Aki','3: Kano']})

df = df['Name'].str.split(r':\s*',expand = True).rename({0:'idx',1:'Name'},axis =1)
输出:

>>> df
  idx  Name
0   1   Aki
1   2   Aki
2   3  Kano
    id  name
0   1   Aki
1   2   Aki
2   3   Kano

修复代码后:

df = pd.DataFrame({'Name':['1: Aki','2: Aki','3: Kano']})

df = df['Name'].str.split(r':\s*',expand = True).rename({0:'idx',1:'Name'},axis =1)
输出:

>>> df
  idx  Name
0   1   Aki
1   2   Aki
2   3  Kano
    id  name
0   1   Aki
1   2   Aki
2   3   Kano
试试这个:

import pandas as pd

# add sample data
df = pd.DataFrame({'Name': ['1: Aki','2: Aki','3: Kano']}) 
   
df[['idx','Name']] = df.Name.str.split(":",expand=True) 
   
print(df)

试试这个:

import pandas as pd

# add sample data
df = pd.DataFrame({'Name': ['1: Aki','2: Aki','3: Kano']}) 
   
df[['idx','Name']] = df.Name.str.split(":",expand=True) 
   
print(df)


您还可以使用提取所有方法:

df = pd.DataFrame({"col": ["1: Aki", "2: Aki", "3: Kano"]})

df = df.col.str.extractall(r"(?P<id>\d+):\s*(?P<name>\w+)").reset_index(drop=True)

您还可以使用提取所有方法:

df = pd.DataFrame({"col": ["1: Aki", "2: Aki", "3: Kano"]})

df = df.col.str.extractall(r"(?P<id>\d+):\s*(?P<name>\w+)").reset_index(drop=True)

:/s*
您使用的是正斜杠而不是反斜杠。你的正则表达式应该是“
r”:\s*”
。这篇文章中的答案对你的情况都不起作用吗?是的,谢谢你……我犯的主要错误是……我用的是“:”而不是“:”,它是用日语键盘输入的,所以正则表达式与字符串不匹配。
:/s*
你用的是正斜杠而不是反斜杠。你的正则表达式应该是
r:“\s*”
。这篇文章中的答案对你的情况都不起作用吗?是的,谢谢你……我犯的主要错误是……我用的是“:”而不是“:”,它是用日语键盘输入的,所以正则表达式与字符串不匹配。