【问题标题】:Identify types of Pandas DataFrame columns numpy array of DataFrame values识别 Pandas DataFrame 列的类型 numpy DataFrame 值数组
【发布时间】:2020-05-24 22:35:06
【问题描述】:

我正在编写胶水代码连接使用 Pandas DataFrames 和 Numpy 数组的库,并且在确定最初从 Pandas DataFrames 创建的 Numpy 数组中哪些列是“对象/字符串”时遇到了一些问题。

import pandas as pd
test_df = pd.DataFrame({"a": [1, 2, 3], "b": ["one", "two", "three"]})
test_arr = test.values
test_df2 = pd.DataFrame(test_arr)

test_df.dtypes
# a     int64, b    object

test_df2.dtypes

# 0    object, 1    object

我希望 test_df2.dtypes 是 int64 & object 而不是两个 object。

如何使用 numpy 数组 'test_arr' 中的信息找到原始 Pandas DataFrame 列的数据类型?

我可以使用以下方法实现所需的行为,但想知道是否有更高效/优雅的解决方案?我也担心这种方法可能很脆弱:

test_df3 = pd.DataFrame(test_arr).apply(
lambda x: pd.to_numeric(x, errors="ignore"), axis=1
)

编辑 - 一些使用 test_df 数据类型的解决方案。我无权访问它,也无法控制 test_arr 的创建方式。我想仅使用 test_arr 来查找 test_df 的数据类型。

【问题讨论】:

    标签: arrays pandas numpy dataframe types


    【解决方案1】:

    您可以使用test_df dtypes 创建一个包含test_df2 列的字典,并在df.astype 中使用该字典

    d = dict(zip(test_df2.columns,[*test_df.dtypes]))
    #{0: dtype('int64'), 1: dtype('O')}
    final = test_df2.astype(dict(zip(test_df2.columns,[*test_df.dtypes])))
    

    print(final.dtypes)
    0     int64
    1    object
    dtype: object
    

    还有另一个名为 infer_objects 的内置函数 它试图为对象列推断更好的 dtypes

    final1 = test_df2.astype(object).infer_objects()
    print(final1.dtypes)
    

    0     int64
    1    object
    dtype: object
    

    【讨论】:

    • 我无法访问 test_df
    • @oli5679 你也试过infer_objects(第二种建议的方法)吗?
    【解决方案2】:

    你可以做这样的事情:

    import pandas as pd
    test_df = pd.DataFrame({"a": [1, 2, 3], "b": ["one", "two", "three"]})
    test_arr = test_df.to_numpy()
    test_df2 = pd.DataFrame(test_arr, columns = test_df.columns).astype(test_df.dtypes)
    

    请注意,在 pandas 文档中,最好使用 .to_numpy() 而不是 .values,如本文所述 pandas_docs

    【讨论】:

    • 我正在使用将我的数据框转换为数组的外部库,并且无法访问 test_df
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-12
    • 2014-03-06
    • 2019-08-04
    相关资源
    最近更新 更多