python - 根据单元格类型展开 pandas 列

标签 python pandas dataframe

我有以下数据框:

  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_indexSeries.unstackDataFrame.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/

相关文章:

python - Pandas,如何将多列组合成一个数组列

python - 带有Dropbox API的AWS Chalice

python - Django 1.11 密码重置 token 的生成发生意外变化

python-2.7 - Pandas 与前一天的价格变化率差异

python - 使用 pandas 将包含混合数据的一列拆分为包含 2 列的数据框

python - Pandas :获取数据帧中对角线下方的元素(索引,列)

python - 像访问常规列一样访问 Pandas 索引

python - 如何检查当前窗口中是否打开了上下文菜单或下拉列表?

python - Pandas 按年分组,按销售列排名,在具有重复数据的数据框中

Python/Pandas 与 NaN 数据合并问题