我正在将文本文件转换为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