我想把一些数据带入pandas DataFrame,并在导入时为每个列分配dtypes。我希望能够对具有许多不同列的较大数据集执行此操作,但是,作为示例:
myarray = np.random.randint(0,5,size=(2,2))
mydf = pd.DataFrame(myarray,columns=['a','b'], dtype=[float,int])
mydf.dtypes
结果:
TypeError:无法理解数据类型
我尝试了其他一些方法,例如:
mydf = pd.DataFrame(myarray,columns=['a','b'], dtype={'a': int})
TypeError:类型“type”的对象没有len()
如果我输入dtype=(float,int)
,它将对两列应用浮点格式。
最后,我希望能够传递给它一个数据类型列表,就像我传递给它一个列名列表一样。
5条答案
按热度按时间3qpi33ja1#
我刚刚遇到了这个问题,Pandas的问题仍然是开放的,所以我张贴我的解决办法。假设
df
是我的DataFrame,dtype
是一个将列名Map到类型的dict:(note:在python中使用
dtype.iteritems()
2)供参考:
dtypes
):https://docs.scipy.org/doc/numpy-1.12.0/reference/arrays.dtypes.htmlcategory
:http://pandas.pydata.org/pandas-docs/stable/categorical.htmlx33g5p2x2#
您可能想尝试将
Series
对象的字典传递给DataFrame
构造函数-它将为您提供对创建的更具体的控制,并且应该更清楚地了解正在发生的事情。模板版本(data1
可以是数组等):以数据为例:
t3psigkw3#
从pandas版本0.24.2(当前的稳定版本)开始,不可能将数据类型的显式列表作为docs状态传递给DataFrame构造函数:
然而,dataframe类确实有一个静态方法,允许您将numpy结构化数组转换为dataframe,因此您可以执行以下操作:
qzwqbdag4#
在Pandas 1.5.3版本中,可以传递显式数据类型:
vsdwdz235#
在使用数据类型时,它们应该作为字符串传递。
例如,后面的方法应该修改为
mydf = pd.DataFrame(myarray,columns=['a','b'], dtype={'a': 'int'})
而不是
mydf = pd.DataFrame(myarray,columns=['a','b'], dtype={'a': int})
。dtype (int, float etc.)
应该作为字符串给出。或者作为替代方法(如果你不想作为字符串传递)import numpy as np并使用
mydf = pd.DataFrame(myarray,columns=['a','b'], dtype={'a': np.int})