2014-03-25 34 views
4

我能够创建数据帧,并迫使一个数据类型由蟒蛇大熊猫创建数据框,并强制多列类型

import pandas as pd 
test = pd.DataFrame({'a':[1,2,3], 'b':[1.1,2.1,3.1]}, dtype=int) 

但我要为每列指定类型。我怎样才能做到这一点?我尝试了以下不起作用的结果是,dtypes是对象,而b列没有被转换为整数。

test = pd.DataFrame({'a':[1,2,3], 'b':[1.1,2.1,3.1]}, dtype=[('a', int),('b', int)]) 

杰夫帮助了上述情况。但是当我尝试创建一个空的数据框时,我发现了另一个问题,我希望能够指定列类型。对于跨列的单一类型,我可以做

test = pd.DataFrame(columns=['a','b'], dtype=int) 

如果我想为'a'和'b'中的每一个指定类型,该怎么办?

+0

这不支持(可能需要一个字典),你意识到传递dtype是可选的吗? –

回答

4

可以在一个系列,其具有D型参数

In [15]: pd.DataFrame({'a':[1,2,3], 'b':[1.1,2.1,3.1]}).dtypes 
Out[15]: 
a  int64 
b float64 
dtype: object 

In [16]: pd.DataFrame({'a':Series([1,2,3],dtype='int32'), 'b':Series([1.1,2.1,3.1],dtype='float32')}).dtypes 
Out[16]: 
a  int32 
b float32 
dtype: object 
+0

太好了。这工作。谢谢。 – user3461238

+0

下一个但类似的问题,如果我想创建一个指定类型的空数据框? – user3461238

+0

不建议根本创建一个空框架(也不能用指定的类型创建它)。创建您需要的数据,例如系列或其他,只是'concat''或使用上述方法,如果你真的*需要单独的dtypes。 – Jeff

0

可以在numpy阵列的字典通过,与指定dtype传球;这适用于创建填充和空阵列。 (这个答案是对我的回答here轻微的调整。)

这里是一个空数组:

df = pd.DataFrame(data={'a' : np.array([], dtype=int), 
         'b' : np.array([], dtype=float) 
         } 
       ) 

这里有一个filled_array:

df = pd.DataFrame(data={'a' : np.array([1,2,3], dtype=int), 
         'b' : np.array([4,5,6], dtype=float) 
         } 
       ) 

你基本上可以任何类型的使用dtype,如objectstrdatetime.datetimeCrazyClassYouDefined。也就是说,如果熊猫不特别支持某种类型(例如str),熊猫将回退到将该列作为object。不要担心,但一切都应该仍然有效。