使用Python检测数据帧中哪些列是分类的

2024-09-29 23:20:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我想建立一个算法,可以检测哪些列是数据帧中的分类列,哪些是数字列

让我们看看这个数据集(仅作为示例):

df = pd.DataFrame({"ID": [12324, 26342, 62438], "passengerClass": [1, 2, 2], "nationality": ["FR", "ES", "US"]})

我可以假设分类数据是对象/类别类型:

df.dtypes()

正如我们可以看到的,“国籍”列被检测为一个非常重要的对象类型。 问题是“ID”列和“passengerClass”被检测为int64类型,但它们是分类的

有没有办法检测这些列是否也是分类的? (我也考虑了唯一值,但如果我们测量很多车的速度,它在任何时候都不会相同。增加值也是一样,因为有时我们可以删除行,ID的顺序不正确)

Zero建议:https://stackoverflow.com/a/29803290/13919003 但在他的回答中,他并不关心int或float是分类列,这是«passengerClass»列中的情况


Tags: 数据对象算法id示例类型dataframedf
1条回答
网友
1楼 · 发布于 2024-09-29 23:20:18

您可以尝试以下方法:

df = pd.DataFrame({"ID": [12324, 26342, 62438], "passengerClass": [1, 2, 2], "nationality": ["FR", "ES", "US"]})
df = df.astype('category')
print(df.dtypes)

输出:

ID                category
passengerClass    category
nationality       category
dtype: object

注意:

In the above example, all the columns are converted to "category", but you can explicitly specify dtype for individual columns.

-可选选项-

You can create config file to explicitly specify columns name with dtype:

配置文件:

[
  {
    "columnName": "ID",
    "columnDtype": "category"
  },
  {
    "columnName": "passengerClass",
    "columnDtype": "category"
  },
  {
    "columnName": "nationality",
    "columnDtype": "category"
  }
]

代码:

df = pd.DataFrame({"ID": [12324, 26342, 62438], "passengerClass": [1, 2, 2], "nationality": ["FR", "ES", "US"]})

with open('./config.json') as cf:
    configList = json.load(cf)

for col in configList:
    colName = col['columnName']
    colType = col['columnDtype']
    df[colName] = df[colName].astype(colType)

print(df.dtypes)

相关问题 更多 >

    热门问题