首页 > 解决方案 > Pandas:如何使用新的可空字符串和 int 类型构造具有指定类型的 DataFrame?

问题描述

我想用新的可为空的标量类型创建一个 DataFrame 。我正在使用熊猫 1.0.3。

给定进口:

import numpy as np
import pandas as pd
from collections import OrderedDict

如果我有列名:

headers = ['field',
 'yr_code',
 'start_col',
 'end_col',
 'year',
 'variable_name',
 'characteristics',
 'source',
 'date_on']

和数据类型:

dt = [pd.StringDtype(),
 pd.Int64Dtype(),
 np.int16,
 np.numpy.int16,
 pd.Int64Dtype(),
 pd.StringDtype(),
 pd.StringDtype(),
 pd.StringDtype(),
 pd.StringDtype()]

我尝试将列规范创建为:

columns = OrderedDict((h, dt[i]) for i, h in enumerate(headers))  

和一个数据框(带有示例数据):

data = [['F00001', pd.NA, 1, 1, '', 'Blank', '', pd.NA, pd.NA]]     
f = pd.DataFrame(data, columns = columns)

不幸的是,这似乎不起作用:

>>> f.dtypes
field              object
yr_code            object
start_col           int64
end_col             int64
year               object
variable_name      object
characteristics    object
source             object
date_on            object
dtype: object

我知道这dtypes可能会返回底层类型,但yr_code作为对象肯定是错误的。如何为这些类型正确创建 DataFrame?

标签: pythonpandasdataframe

解决方案


你可以做得到f.convert_dtypes()

>>> f.convert_dtypes().dtypes
field              string
yr_code            object
start_col           Int64
end_col             Int64
year               string
variable_name      string
characteristics    string
source             object
date_on            object

推荐阅读