说我得到了这个多索引DataFrame
:
>>> 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
概念有误解,而且想要自己想要的东西是错误的。
提前谢谢!
答案 0 :(得分:2)
较早的版本不支持NaN的整数列,但是从v0.24开始,您可以使用可为null的dtype。使用pd.IndexSlice
选择列切片,然后像这样设置类型:
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 float64
F Int64
D E float64
F Int64
B C E float64
F Int64
D E float64
F Int64
dtype: object
请注意,I
中的Int64
大写表示Nullable Integer Type。