如何更改混合类型的数据类型

how to change datatypes with mixed type

我有来自 Kaggle 的示例数据 https://www.kaggle.com/datasets/gregorut/videogamesales enter image description here 并且销售数据具有混合类型。例如,它有 0.04、50K.... 额外的东西,所以它得到对象作为类型。我想将 -K、-M 的东西更改为 int 并分别乘以 1000、100。所以我尝试了这个但没有用

我该怎么办?

for x in df['NA_Sales']: if type(x) is object: (x.replace('M','')) & (x*100) elif type(x) is float: x*100 预处理(df['NA_Sales']) df['NA_Sales'] for x in df['NA_Sales']: if type(x) is object: (x.replace('M','')) & (x*100) elif type(x) is float: x*100 预处理(df['NA_Sales']) df['NA_Sales']

您在原始问题中分享的来自 Kaggle link 的数据集似乎已经包含清理过的数据,但我现在可以看到您在评论中 link 编辑的未清理数据(带有“K”、“M”、对象类型和数值不一致)。

我确定有更清洁、更 Pandas-centric 的方法,但由于这需要 multi-conditional 替换,我采用了以下方法:

import pandas as pd

df = pd.read_csv(r"path_to_data\vgames2.csv")
sales_cols = df.columns[-4:]

for col in sales_cols:
    for i, r in enumerate(df[col]):
        if 'M' in df[col][i]:
            r1 = float(r.replace('M', ''))*(10**6)
            df.at[i, col] = r1
        else:
            r1 = float(r.replace('K', ''))*(10**3)
            df.at[i, col] = r1
    df[col] = pd.to_numeric(df[col])

基本上我遍历了销售列,然后遍历每一行,检查是否有“M”或“K”,并通过转换为浮点数相应地乘以字符串。我认为既不包含“K”也不包含“M”的字符串应该是“千”。

最后,我将每一列都转换为数字数据类型。

如果有人有更简洁的方法,请随时分享,因为我很想知道更快的方法。