Python 提取字符串
Python extracting string
我有一个数据框,其中一个字符串格式的列如下所示
filename
0 Machine02-2022-01-28_00-21-45.blf.424
1 Machine02-2022-01-28_00-21-45.blf.425
2 Machine02-2022-01-28_00-21-45.blf.426
3 Machine02-2022-01-28_00-21-45.blf.427
4 Machine02-2022-01-28_00-21-45.blf.428
我希望我的专栏看起来像这样
filename
0 2022-01-28 00-21-45 424
1 2022-01-28 00-21-45 425
2 2022-01-28 00-21-45 426
3 2022-01-28 00-21-45 427
4 2022-01-28 00-21-45 428
我试过这个代码
df['filename'] = df['filename'].str.extract(r"(\d{4}-\d{1,2}-\d{1,2})_(\d{2}-\d{2}-\d{2}).*\.(\d+)", r" ")
我收到此错误,& 的操作数类型不受支持:'str' 和 'int'。
谁能告诉我哪里做错了?
使用 str.replace
并添加 .*-
以删除像 Machine02-
:
这样的字符串
df['filename'] = df['filename'].str.replace(r".*-(\d{4}-\d{1,2}-\d{1,2})_(\d{2}-\d{2}-\d{2}).*\.(\d+)", r" ")
print(df)
# Output
filename
0 2022-01-28 00-21-45 424
1 2022-01-28 00-21-45 425
2 2022-01-28 00-21-45 426
3 2022-01-28 00-21-45 427
4 2022-01-28 00-21-45 428
请试试这个:
df['filename'] = df['filename'].str.split('-',1).apply(lambda x:' '.join(x[1].split('_')).replace('.blf.',' '))
正则表达式很好,但如果参数永远不会改变,有时进行替换会更容易且更易读:
df['filename'] = df['filename'].str.replace('Machine02-','',regex=False)
df['filename'] = df['filename'].str.replace('.blf.',' ',regex=False)
使用替换
df['filename']=df['filename'].str.replace('Machine|\.blf\.',' ',regex=True).str.strip().str.replace('^\d+\-','',regex=True)
filename
0 2022-01-28_00-21-45 424
1 2022-01-28_00-21-45 425
2 2022-01-28_00-21-45 426
3 2022-01-28_00-21-45 427
4 2022-01-28_00-21-45 428
或
提取 e02 和 .blf 之间的值
df['filename']=df['filename'].str.extract('((?<=[e02])[\w|\-]+(?=[.blf]))')
filename
0 02-2022-01-28_00-21-45
1 02-2022-01-28_00-21-45
2 02-2022-01-28_00-21-45
3 02-2022-01-28_00-21-45
4 02-2022-01-28_00-21-45
我有一个数据框,其中一个字符串格式的列如下所示
filename
0 Machine02-2022-01-28_00-21-45.blf.424
1 Machine02-2022-01-28_00-21-45.blf.425
2 Machine02-2022-01-28_00-21-45.blf.426
3 Machine02-2022-01-28_00-21-45.blf.427
4 Machine02-2022-01-28_00-21-45.blf.428
我希望我的专栏看起来像这样
filename
0 2022-01-28 00-21-45 424
1 2022-01-28 00-21-45 425
2 2022-01-28 00-21-45 426
3 2022-01-28 00-21-45 427
4 2022-01-28 00-21-45 428
我试过这个代码
df['filename'] = df['filename'].str.extract(r"(\d{4}-\d{1,2}-\d{1,2})_(\d{2}-\d{2}-\d{2}).*\.(\d+)", r" ")
我收到此错误,& 的操作数类型不受支持:'str' 和 'int'。
谁能告诉我哪里做错了?
使用 str.replace
并添加 .*-
以删除像 Machine02-
:
df['filename'] = df['filename'].str.replace(r".*-(\d{4}-\d{1,2}-\d{1,2})_(\d{2}-\d{2}-\d{2}).*\.(\d+)", r" ")
print(df)
# Output
filename
0 2022-01-28 00-21-45 424
1 2022-01-28 00-21-45 425
2 2022-01-28 00-21-45 426
3 2022-01-28 00-21-45 427
4 2022-01-28 00-21-45 428
请试试这个:
df['filename'] = df['filename'].str.split('-',1).apply(lambda x:' '.join(x[1].split('_')).replace('.blf.',' '))
正则表达式很好,但如果参数永远不会改变,有时进行替换会更容易且更易读:
df['filename'] = df['filename'].str.replace('Machine02-','',regex=False)
df['filename'] = df['filename'].str.replace('.blf.',' ',regex=False)
使用替换
df['filename']=df['filename'].str.replace('Machine|\.blf\.',' ',regex=True).str.strip().str.replace('^\d+\-','',regex=True)
filename
0 2022-01-28_00-21-45 424
1 2022-01-28_00-21-45 425
2 2022-01-28_00-21-45 426
3 2022-01-28_00-21-45 427
4 2022-01-28_00-21-45 428
或
提取 e02 和 .blf 之间的值
df['filename']=df['filename'].str.extract('((?<=[e02])[\w|\-]+(?=[.blf]))')
filename
0 02-2022-01-28_00-21-45
1 02-2022-01-28_00-21-45
2 02-2022-01-28_00-21-45
3 02-2022-01-28_00-21-45
4 02-2022-01-28_00-21-45