我试图在pandas dataFrame列中查找不同的数据类型,并将它们放在单独的列中以进行一些计算。我已经尝试过使用带有屏蔽功能的Regex来识别其他数据类型,例如字符串和整数,如下所示
df[data_types]=df[i].astype(str).str.contains('^[-+]?[0-9]+$', case=False, regex=True), "Integer").mask(df[i].astype(str).str.contains('^[a-zA-Z ]+$', case=False, regex=True), "string")
这里的问题是我想处理不同类型的日期格式,并将它们标识为单个数据类型“日期”。并且列可以具有以下任何类型的数据:
column_1
----------
18/01/18
01/18/18
17/01/2018
12/21/2018
jan-02-18
Nan
02-jan-18
2018/01/13
hello
2345
编辑: 我在同一行中使用了mask,因为我想处理该列中的每个数据类型并确定它们具有最终结果,如下面的
column_1 | data_types
---------- |- - - - - - -
18/01/18 | date
01/18/18 | date
17/01/2018 | date
12/21/2018 | date
jan-02-18 | date
Nan | null
02-jan-18 | date
2018/01/13 | date
hello | string
2345 | Integer
这正好满足了我的需求
df[data_types]=df[i].astype(str).str.contains('^[-+]?[0-9]+$', case=False, regex=True), "Integer").mask(df[i].astype(str).str.contains('^[a-zA-Z ]+$', case=False,regex=True),string").mask(to_datetime(df[i],errors='coerce').notnull(),"date".mask(df[i].astype(str).str.contains('nan', case=False, regex=True), "null")
所提供的任何帮助均受到高度赞赏
答案 0 :(得分:2)
使用numpy.select
通过多个条件创建新列,并使用to_datetime
和NaN
来使用m1 = df[i].astype(str).str.contains('^[-+]?[0-9]+$', case=False, regex=True)
m2 = df[i].astype(str).str.contains('^[a-zA-Z ]+$', case=False, regex=True)
m3 = pd.to_datetime(df[i], errors='coerce').notna()
#oldier pandas versions
#m3 = pd.to_datetime(df[i], errors='coerce').notnull()
df[data_types]= np.select([m1, m2, m3], ["Integer", 'string', 'date'], default='not_matched')
来返回{{1}},以获取不可解析的值,因此请用{{ 3}}:
{{1}}