所以我有一列代码:“ dataset.csv”
0020-004241 purple
00532 - Blue
00121 - Yellow
055 - Greem
0025-097 - Orange
所需的输出:
code name_of_code
0020-004241 purple
00532 blue
我希望将代码和代码字分成两个不同的列。
我尝试过:
df =pandas.read_csv(dataset.txt)
df = pandas.concat([df, df.columnname.str.split('/s', expand=True)], 1)
df = pandas.concat([df, df.columnname.str.split('-', expand=True)], 1)
` 它给出了意外的输出: 紫色无 蓝色无 黄色无 绿色无 橙色没有
我应该如何正确分割这些数据?
答案 0 :(得分:2)
使用str.split(" ", 1)
例如:
import pandas as pd
df = pd.read_csv(filename,names=['code'])
df[['code','name_of_code']] = df["code"].str.split(" ", 1, expand=True)
df["name_of_code"] = df["name_of_code"].str.strip("-")
print(df)
输出:
code name_of_code
0 0020-004241 purple
1 00532 Blue
2 00121 Yellow
3 055 Greem
4 0025-097 Orange
答案 1 :(得分:2)
您可以通过几个拆分呼叫来处理此问题:
df = pd.DataFrame({'col': ['0020-004241 purple', '00532 - Blue',
'00121 - Yellow', '055 - Greem',
'0025-097 - Orange']})
df[['col1', 'col2']] = df['col'].str.split(n=1, expand=True)
df['col2'] = df['col2'].str.split().str[-1]
print(df)
col col1 col2
0 0020-004241 purple 0020-004241 purple
1 00532 - Blue 00532 Blue
2 00121 - Yellow 00121 Yellow
3 055 - Greem 055 Greem
4 0025-097 - Orange 0025-097 Orange
答案 2 :(得分:0)
您还可以将.str.extract
与正则表达式一起使用。
df[['code', 'name_of_code']] = df.col.str.extract('(.*\d+)\s-?\s?(.*)', expand=True)
print(df)
col code name_of_code
0 0020-004241 purple 0020-004241 purple
1 00532 - Blue 00532 Blue
2 00121 - Yellow 00121 Yellow
3 055 - Greem 055 Greem
4 0025-097 - Orange 0025-097 Orange
答案 3 :(得分:0)
在加载CSV时,可以使用正则表达式作为分隔符,以避免进一步拆分。
from io import StringIO
import pandas as pd
file = StringIO(
"""0020-004241 purple
00532 - Blue
00121 - Yellow
055 - Greem
0025-097 - Orange"""
)
df = pd.read_csv(file, sep='\s+\-*\s*', header=None)
当然,您可以添加标题,但是在此示例中,我试图与初始输入保持一致。
现在read_csv
产生以下DF:
0 1
0 0020-004241 purple
1 00532 Blue
2 00121 Yellow
3 055 Greem
4 0025-097 Orange
答案 4 :(得分:0)
使用lambda的两行代码:
df['code'] = df['code_and_name_of_code'].apply(lambda x: x.split(" ", 1)[0])
df['name_of_code'] = df['code_and_name_of_code'].apply(lambda x: x.split(" ", 1)[1].replace('-',''))
输入:
import pandas as pd
df =pd.read_csv('data.txt')
code_and_name_of_code
0 0020-004241 purple
1 00532 - Blue
2 00121 - Yellow
3 055 - Greem
4 0025-097 - Orange
应用Lambdas
df['code'] = df['code_and_name_of_code'].apply(lambda x: x.split(" ", 1)[0])
df['name_of_code'] = df['code_and_name_of_code'].apply(lambda x: x.split(" ", 1)[1].replace('-',''))
注意:
输出
code_and_name_of_code code name_of_code
0 0020-004241 purple 0020-004241 purple
1 00532 - Blue 00532 Blue
2 00121 - Yellow 00121 Yellow
3 055 - Greem 055 Greem
4 0025-097 - Orange 0025-097 Orange