python - 使用“object”类型的 numpy 数组创建混合类型的 Pandas 数据框
问题描述
我有一个混合数据类型(float64 和字符串)的 pandas 数据框,要在 sklearn 管道中使用它,我需要将其转换为 numpy 数组。在管道的最后,我想再次制作一个 Dataframe。
问题是,在创建具有混合类型的 numpy 数组时,所有数据都将转换为 dtype “object”。这样,当我最后创建一个新数据框时,所有数据都是分类的。
例子:
具有混合数据的数据框
>>> dataframe = pd.DataFrame([[1,2,3],["a","b","c"]], columns = ["num", "cat"])
>>> dataframe.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 2 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 num 3 non-null int64
1 cat 3 non-null object
dtypes: int64(1), object(1)
memory usage: 176.0+ bytes
到 numpy 数组
>>> array = dataframe.to_numpy()
array([[1, 'a'],
[2, 'b'],
[3, 'c']], dtype=object)
返回数据框
>>> new_df = pd.DataFrame(array, columns = ["num", "cat"])
>>> new_df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 2 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 num 3 non-null object
1 cat 3 non-null object
dtypes: object(2)
memory usage: 176.0+ bytes
现在这两列是分类的。
有没有办法让 pandas 识别 numpy 数组中的真实数据类型?
解决方案
如果您使用的是 pandas >= 1.0,则有convert_dtypes
:
>>> new_df = pd.DataFrame(array, columns = ["num", "cat"]).convert_dtypes()
>>> new_df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 2 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 num 3 non-null Int64
1 cat 3 non-null string
dtypes: Int64(1), string(1)
memory usage: 179.0 bytes
推荐阅读
- unity3d - 玩家停止移动角色方向重置[Unity 2D]
- postgresql - PostgreSQL 慢查询与排名结果
- gcc - 打包和运送 GCC 编译器,以及 AWS Lambda 的所有依赖项
- reactjs - 如何将 2 个函数作为道具传递给 touchableOpacity?
- google-cloud-pubsub - Airflow:创建一个 Operator,它根据 hook 结果返回一个传感器或一个 DummyOperator
- tarantool - 如何使用 go-tarantool 在 Tarantool 中插入 UUID?
- javascript - 无法解构“e.target”的属性“名称”,因为它未定义
- c - Atmega328p 仅处理一个 ISR
- python - 将 Django ModelSerializer 序列化为 json?
- javascript - 根据选择标准添加值