我有以下数据框:
field value
0 longitude 100
1 altitude 200
2 location China
3 date 20180303
......
我想将此数据框转换为以下格式:
field string_value int_value datetime_value boolean_value float_value field_type
0 longitude NA NA NA NA 100 float
1 altitude NA NA NA NA 200 float
2 location China NA NA NA NA str
3 date NA NA 20180303 NA NA datetime
......
我怎样才能有效地做到这一点?我想我可以用 apply
来做到这一点,但这看起来很慢,因为它逐行遍历数据帧。有没有更快的方法来做到这一点?
最佳答案
想法是获取值的类型
,转换为字符串并映射
为更好的可读形式,然后对于新列使用 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
关于python - 根据单元格类型展开 pandas 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55138797/