Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 设置多索引数据帧的类型(数据类型)_Python_Pandas - Fatal编程技术网

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会从中推断出列的数据类型。所以,这不是一个常见的要求,这就是为什么它看起来像它一样笨重。