如何更改混合类型的数据类型
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”的字符串应该是“千”。
最后,我将每一列都转换为数字数据类型。
如果有人有更简洁的方法,请随时分享,因为我很想知道更快的方法。
我有来自 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”的字符串应该是“千”。
最后,我将每一列都转换为数字数据类型。
如果有人有更简洁的方法,请随时分享,因为我很想知道更快的方法。