【问题标题】:Panda's DataFrame double transpose changes numeric types to objectPandas DataFrame 双转置将数字类型更改为对象
【发布时间】:2014-09-01 04:10:27
【问题描述】:

我正在从 excel 中的 2 个不同位置读取数据帧的标题和数据(两者都正确对齐但不相邻)。标题可能包含许多空白,因此我需要丢弃这些标题和数据中的相应列。所以我的最后一帧有非空标题和对应于这些标题的数据。下面使用转置的逻辑有效,但我在双重转置时丢失了数据类型 - 请参见下面的具体示例 - 题 1)关于如何在不换位的情况下实现它的任何建议? 2)这就是转座应该如何工作的吗?它是否应该在第二次转置时再次推断 dtypes?

  In [25]:

hd=pd.DataFrame({0:['num'],
                 1:np.nan,
                 2:['ltr']})
hd
Out[25]:
0   1   2
0    num    NaN  ltr
In [26]:

data=pd.DataFrame({0:np.arange(3),
                 1:['a','b','c'],
                 2:['d','e','f']})
data
Out[26]:
0   1   2
0    0   a   d
1    1   b   e
2    2   c   f
In [27]:

df=data.T[hd.iloc[0].notnull()].T
df.columns=hd.iloc[0].dropna()     
df
Out[27]:
num ltr
0    0   d
1    1   e
2    2   f
In [28]:

df.dtypes
Out[28]:
0
num    object
ltr    object
dtype: object

In [25]:

hd=pd.DataFrame({0:['num'],
                 1:np.nan,
                 2:['ltr']})
hd
Out[25]:
0   1   2
0    num    NaN  ltr
In [26]:

data=pd.DataFrame({0:np.arange(3),
                 1:['a','b','c'],
                 2:['d','e','f']})
data
Out[26]:
0   1   2
0    0   a   d
1    1   b   e
2    2   c   f
In [27]:

df=data.T[hd.iloc[0].notnull()].T
df.columns=hd.iloc[0].dropna()     
df
Out[27]:
num ltr
0    0   d
1    1   e
2    2   f
In [28]:

df.dtypes
Out[28]:
0
num    object
ltr    object
dtype: object

【问题讨论】:

  • 这和预期的一样,数据类型是基于列的。如果你想重新推断它们,你可以使用df.convert_objects()

标签: python pandas


【解决方案1】:

当您开始混合 dtypes 时,转置将 dtypes 转换为 object。正如预期的那样,dtypes 是基于列的。如果你想重新推断它们,你可以使用df.convert_objects()

但是,只需这样做:

In [10]: data.loc[:,hd.iloc[0].notnull()]
Out[10]: 
   0  2
0  0  d
1  1  e
2  2  f

In [11]: data.loc[:,hd.iloc[0].notnull()].dtypes
Out[11]: 
0     int64
2    object
dtype: object

【讨论】:

  • convert_objects 已被弃用。
  • 同上,现在可以使用:pandas.DataFrame.infer_objects
猜你喜欢
  • 2019-02-04
  • 2013-11-14
  • 1970-01-01
  • 2018-06-25
  • 1970-01-01
  • 1970-01-01
  • 2015-09-15
  • 2017-01-13
  • 1970-01-01
相关资源
最近更新 更多