【发布时间】:2024-01-24 00:01:01
【问题描述】:
我有一个包含以下记录的数据集:
@attribute pelvic_incidence numeric
@attribute pelvic_tilt numeric
@attribute lumbar_lordosis_angle numeric
@attribute sacral_slope numeric
@attribute pelvic_radius numeric
@attribute degree_spondylolisthesis numeric
@data
74.09473084,18.82372712,76.03215571,55.27100372,128.4057314,73.38821617,Abnormal
87.67908663,20.36561331,93.82241589,67.31347333,120.9448288,76.73062904,Abnormal
48.25991962,16.41746236,36.32913708,31.84245726,94.88233607,28.34379914,Abnormal
38.50527283,16.96429691,35.11281407,21.54097592,127.6328747,7.986683227,Normal
54.92085752,18.96842952,51.60145541,35.952428,125.8466462,2.001642472,Normal
44.36249017,8.945434892,46.90209626,35.41705528,129.220682,4.994195288,Normal
48.3189305,17.45212105,47.99999999,30.86680945,128.9803079,-0.910940567,Normal
我希望从给定的数据集创建一个“DataFrame”,然后将名为“类”的列的标签分别从“异常”更改为 0,将“正常”更改为 1。我做了以下事情:
raw_data = loadarff('column_2C_weka.arff')
df = pd.DataFrame(raw_data[0])
df["class"].replace({"Abnormal": "0" , "Normal" : "1"},inplace = True)
print(df['class'])
不幸的是,“类”列没有更新值,即它仍然显示相同的“异常”和“正常”数据标签。
为了更确定 replace 方法的工作原理,我尝试了一个小的 DataFrame:
df = pd.DataFrame({"column1": ["a", "b", "a"]})
print(df)
df["column1"].replace({"a": "x", "b": "y"}, inplace=True)
print(df)
令人惊讶的是,它确实将值从 a 更改为 x 并将 b 更改为 y:
column1
0 a
1 b
2 a
column1
0 x
1 y
2 x
我很困惑。为什么我的数据集没有出现,而是被这个 DataFrame 替换了?
提前致谢。
P。 S : 这样的事情对我有用
df['class'] = df['class'].astype(str).str.replace('Abnormal', '0')
我不知道它是如何获得所需输出的,而不是之前的所有输出!任何帮助表示赞赏。
【问题讨论】:
-
对于您的样本,
loadarff未加载您的最后一列。你使用来自scipy的loadarff吗? -
解释在this答案中。
-
@Corralien 是的,我写了
from scipy.io.arff import loadarff。但是为什么没有加载最后一列? -
@jezrael 我删除了
inplace = True部分,还尝试完全删除inplace方法,但仍然得到相同的输出。 -
如果你想替换
inplace,你不应该切片你的数据框:df.replace({'class': {'Abnormal': '0' , 'Normal' : '1'}}, inplace=True)
标签: python pandas dataframe replace