我正在从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

最佳答案

当您要开始使用混合dtype时,将dtype转换为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

关于python - Pandas DataFrame双重转置将数字类型更改为对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24682396/

10-12 22:47