Python 设置多索引数据帧的类型(数据类型)
假设我得到了这个多索引Python 设置多索引数据帧的类型(数据类型),python,pandas,Python,Pandas,假设我得到了这个多索引数据帧: >>> df = pandas.DataFrame(index=range(3), columns=pandas.MultiIndex.from_product( (('A', 'B'), ('C', 'D'), ('E', 'F')))) >>> df A B
数据帧
:
>>> df = pandas.DataFrame(index=range(3), columns=pandas.MultiIndex.from_product(
(('A', 'B'), ('C', 'D'), ('E', 'F'))))
>>> df
A B
C D C D
E F E F E F E F
0 NaN NaN NaN NaN NaN NaN NaN NaN
1 NaN NaN NaN NaN NaN NaN NaN NaN
2 NaN NaN NaN NaN NaN NaN NaN NaN
>>> df.dtypes
A C E object
F object
D E object
F object
B C E object
F object
D E object
F object
如何将所有列E
的类型设置为float64
,将所有列F
的类型设置为int64
?即,df.dtypes
返回以下内容:
A C E float64
F int64
D E float64
F int64
B C E float64
F int64
D E float64
F int64
我知道DataFrame.astype
,它对于单索引DataFrame
,效果很好,但是如何将它与多索引一起使用呢?在实际代码中,列的数量要高得多:仍然有三个级别,但列数达到数百万
我一直在搜索网络和文档,但找不到答案。感觉好像我误解了DataFrame
的概念,我想要的东西是错误的
提前谢谢你 旧版本不支持NAN的整数列,但从v0.24开始,可以使用可为空的数据类型。使用
pd.indexlice
选择列切片,然后设置如下类型:
pd.__version__
# '0.24.2'
for cval, dtype in [('E', 'float64'), ('F', 'Int64')]:
df.loc[:, pd.IndexSlice[:, :,cval]] = (
df.loc[:, pd.IndexSlice[:, :,cval]].astype(dtype))
df.dtypes
A C E浮动64
F Int64
D E浮动64
F Int64
B、C、E、64
F Int64
D E浮动64
F Int64
数据类型:对象
请注意,
Int64
中的I
大写表示a。谢谢。当然,你不知道我的“案例”的细节,也不知道我想要实现什么,但是你会说想要像这样设置类型在熊猫世界中是有意义的吗?在我看来,这似乎是很合乎逻辑的,我希望通过构造函数可以轻松设置每个列的类型,但事实并非如此。这让我觉得我是“单纯形的”。@ryhp通常使用数据初始化数据帧,pandas会从中推断出列的数据类型。所以,这不是一个常见的要求,这就是为什么它看起来像它一样笨重。