熊猫的数据帧双重转置将数字类型更改为对象



我正在读取标题和数据框的数据从excel中的2个不同的位置(两者都正确对齐,但不相邻)。标头可能包含许多空白,因此我需要丢弃这些标头和数据中的相应列。最后一帧有非空报头和与这些报头相对应的数据。下面使用转置的逻辑可以工作,但是我在双转置时丢失了数据类型-参见下面的具体示例-问题有什么建议吗,我怎样才能做到不换位?2)这就是换位的工作方式吗?它不应该在第二次换位时再次推断出d型吗?

  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

当您开始使用混合dtypes时,将dtypes转换为object。正如预期的那样,dtype是基于列的。如果你想重新推断它们,你可以使用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

最新更新