Идея состоит в том, чтобы получить type
s значений, преобразовать в строку и map
в более удобочитаемую форму, затем для новых столбцов используйте DataFrame.set_index
с Series.unstack
и DataFrame.join
к оригиналу:
d = {'field': ['longitude', 'altitude', 'location', 'date','check'],
'value': [100, 200.5, 'China', pd.Timestamp('20180303'), True]}
df = pd.DataFrame(d)
#print (df)
d = {"<class 'bool'>":"bool",
"<class 'float'>":"float",
"<class 'int'>":"int",
"<class 'str'>":"string",
"<class 'pandas._libs.tslibs.timestamps.Timestamp'>":"datetime"}
s = df['value'].apply(type).astype(str).map(d).fillna('not defined type')
df = df.join(df.set_index(s, append=True)['value'].unstack())
df['field_type'] = s
print (df)
field value bool datetime float int \
0 longitude 100 NaN NaN NaN 100
1 altitude 200.5 NaN NaN 200.5 NaN
2 location China NaN NaN NaN NaN
3 date 2018-03-03 00:00:00 NaN 2018-03-03 00:00:00 NaN NaN
4 check True True NaN NaN NaN
string field_type
0 NaN int
1 NaN float
2 China string
3 NaN datetime
4 NaN bool