例如:
raw = {'x':[1,2,3,4], 'y':[None,]*4, 'z':[datetime.now()] *4, 'e':[1,2,3,4]}
a = pd.DataFrame(raw, dtype={'x':float, 'y':float, 'z':object, 'e':int})
这不起作用。
目前我必须这样做:
a = pd.DataFrame(raw, dtype=object)
a['x'] = a['x'].astype(float)
a['y'] = a['y'].astype(float)
a['z'] = pd.to_date_time(a['z'], utc=True)
a['e'] = a['e'].astype(int)
由于我想要将多个raw
个对象投射到数据框中,是否有一种简单的方法可以强制正确dtypes
构建时间,而不是稍后转换它们,这需要2倍需要时间。
@Jeff有一个很好的方法来处理raw
,如果它是dict格式。
但如果raw
采用记录格式,例如:
raw = [(1,None,datetime.now(),1),
(2,None,datetime.now(),2),
(3,None,datetime.now(),3),
(4,None,datetime.now(),4)]
我必须zip
吗?也许zip
花费的时间比花费更多的费用还要多吗?
DataFrame.from_records
似乎根本不接受dtype
参数。
答案 0 :(得分:3)
构造函数将正确推断非模糊类型。您不能指定复合dtype映射ATM,问题是here,欢迎拉请求实现此。
None
,而是使用np.nan
(否则会推断为object
dtype)Series([1,2,3,4],dtype='float')
datetime64[ns]
,除非您需要指定时区,否则这几乎总是您想要的这是您的例子
In [20]: DataFrame({
'x':Series([1,2,3,4],dtype='float'),
'y':Series([None,]*4,dtype='float'),
'z':[datetime.datetime.now()] *4,
'e':[1,2,3,4]})
Out[20]:
e x y z
0 1 1 NaN 2014-06-17 07:40:42.188422
1 2 2 NaN 2014-06-17 07:40:42.188422
2 3 3 NaN 2014-06-17 07:40:42.188422
3 4 4 NaN 2014-06-17 07:40:42.188422
In [21]: DataFrame({
'x':Series([1,2,3,4],dtype='float'),
'y':Series([None,]*4,dtype='float'),
'z':[datetime.datetime.now()] *4,
'e':[1,2,3,4]}).dtypes
Out[21]:
e int64
x float64
y float64
z datetime64[ns]
dtype: object