【发布时间】:2019-10-31 04:17:50
【问题描述】:
我想将一些数据带入 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),它会将浮点格式应用于两列。
最后,我希望能够向它传递一个数据类型列表,就像向它传递一个列名列表一样。
【问题讨论】:
-
dtype的参数应该是有效的 numpy dtype(不支持结构化 dtype),因此 list 或 dict 将不起作用。一种可能的方法是分别为每一列执行 astype。或者首先制作一个结构化的 numpy 数组并将其提供给 DataFrame。 -
我知道我可以在一个循环中单独分配每个,但我很惊讶 dtype= 不够灵活,无法容纳一个列表。不过感谢您的回答,很高兴得到确认:)
-
github.com/pydata/pandas/issues/4464 目前是一个未解决的问题(如果你想做一个拉取请求会很棒)
-
只是为了好玩:有人使用
read_csv: stackoverflow.com/a/38524255/6646912 解决了这个问题:D