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



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

samle数据
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_output['ID'] = df['name'].str.extract(r'^(d+)')
df_output['name'] = df['name'].str.extract(r'^d+: (.*)$')

很接近了,只是需要更改一些语法。试试这个:

创建数据

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

干净数据

让我们删除空格,然后在": "上分割列(冒号后加空格)

clean_df = (df["column"].str.strip()                     # remove whitespace
.str.split(": ", expand=True)                # new df with 2 columns (0, 1)
.rename(columns={0: "number", 1: "name"}))   # new df renamed columns
print(clean_df)
number  name
0      1   Aki
1      2   Aki
2      3  Kano

将清理后的数据与原始

合并现在我们的数据很好,很干净,我们可以把它join回原来的数据帧:

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(
df["column"].str.strip()
.str.split(": ", expand=True)
.rename(columns={0: "number", 1: "name"}))

修改代码后:

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

试试这个:

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)

您也可以使用extractall方法:

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)

输出:

id  name
0   1   Aki
1   2   Aki
2   3   Kano

相关内容

最新更新