Python 从正则表达式字典创建列
我想创建一个列,基本上显示excel电子表格中数据的数据类型,即,如果任何给定单元格中的数据是字符串、整数或浮点等。目前,我正在使用模拟数据进行测试,并希望最终将其用于具有更多字段标题的更大excel文件 我目前的高级方法如下:Python 从正则表达式字典创建列,python,regex,pandas,dataframe,Python,Regex,Pandas,Dataframe,我想创建一个列,基本上显示excel电子表格中数据的数据类型,即,如果任何给定单元格中的数据是字符串、整数或浮点等。目前,我正在使用模拟数据进行测试,并希望最终将其用于具有更多字段标题的更大excel文件 我目前的高级方法如下: 读取Excel文件并创建数据框 重新设置此表的格式,以创建一列包含我希望用数据类型(即,如果是字符串、整数或浮点)标记的所有数据,以及相应的字段标题 创建一个“数据类型”列,该列将包含每个数据段的这些标签,这些数据段由正则表达式字典中的相应数据类型填充 这是我希望将正则
index fh attribute Data Type
0 0 FUND ID 10101 10101
1 0 FUND NAME Holdings company A Holdings company A
2 0 AMOUNT 10000 10000
3 1 FUND ID 20202 20202
4 1 FUND NAME Holdings company B Holdings company B
5 1 AMOUNT 2000.5 2000.5
6 2 FUND ID 30303 30303
7 2 FUND NAME Holdings company C Holdings company C
8 2 AMOUNT 3000 3000
这是所需的输出:
index fh attribute Data Type
0 0 FUND ID 10101 Integer
1 0 FUND NAME Holdings company A String
2 0 AMOUNT 10000 Integer
3 1 FUND ID 20202 Integer
4 1 FUND NAME Holdings company B String
5 1 AMOUNT 2000.5 Float
6 2 FUND ID 30303 Integer
7 2 FUND NAME Holdings company C String
8 2 AMOUNT 3000 Integer
但是,以下代码生成下表:
stackdf_regex = stackdf_regex.replace({'Data Type':repl_dict}, regex=True)
pd.concat([stackdf, stackdf_regex], axis=1)
index fh attribute Data Type
0 0 FUND ID 10101 10101
1 0 FUND NAME Holdings company A String
2 0 AMOUNT 10000 10000
3 1 FUND ID 20202 20202
4 1 FUND NAME Holdings company B String
5 1 AMOUNT 2000.5 2000.5
6 2 FUND ID 30303 30303
7 2 FUND NAME Holdings company C String
8 2 AMOUNT 3000 3000
也许我的正则表达式不正确,或者我对在数据帧上应用正则表达式缺乏理解。很高兴收到关于当前方法或其他我未考虑过的合适/有效方法的任何建议
注意:我希望最终扩展regex字典以考虑更多的数据类型,我知道检查每个单元格中是否有较大数据集的模式可能不是很有效,但我仍处于早期阶段。您可以使用,其中,每个条件
使用选项对列数据类型
测试给定正则表达式
,并且选项
对应于以下条件:
conditions = [
df['Data Type'].str.contains(r'^\d+$'),
df['Data Type'].str.contains(r'^[\w\s]+$'),
df['Data Type'].str.contains(r'^\d+\.\d+$')]
choices = ['Interger', 'String', 'Float']
df['Data Type'] = np.select(conditions, choices, default=None)
您可以使用,其中每个
条件
测试列数据类型的给定正则表达式,并且选项
对应于以下条件:
conditions = [
df['Data Type'].str.contains(r'^\d+$'),
df['Data Type'].str.contains(r'^[\w\s]+$'),
df['Data Type'].str.contains(r'^\d+\.\d+$')]
choices = ['Interger', 'String', 'Float']
df['Data Type'] = np.select(conditions, choices, default=None)
conditions = [
df['Data Type'].str.contains(r'^\d+$'),
df['Data Type'].str.contains(r'^[\w\s]+$'),
df['Data Type'].str.contains(r'^\d+\.\d+$')]
choices = ['Interger', 'String', 'Float']
df['Data Type'] = np.select(conditions, choices, default=None)
# print(df)
index fh attribute Data Type
0 0 FUND ID 10101 Interger
1 0 FUND NAME Holdings company A String
2 0 AMOUNT 10000 Interger
3 1 FUND ID 20202 Interger
4 1 FUND NAME Holdings company B String
5 1 AMOUNT 2000.5 Float
6 2 FUND ID 30303 Interger
7 2 FUND NAME Holdings company C String
8 2 AMOUNT 3000 Interger