如何用星号(“*”)替换csv文件列中的非重复值?
How to replace non-duplicated values in columns of csv files by stars("*")?
everybody.I 需要匿名化 the raw table to make a anonymized table。换句话说,我需要用星星替换不重复的集合。
其实我有运行这个代码:
for j in range(len(zz_new)):
for i in range(len(zz)):
if zz_new.iloc[j][0] != zz.iloc[i][0]:
zz_new.iat[j,0]="*"
if zz_new.iloc[j][1] != zz.iloc[i][1]:
zz_new.iat[j,1]="*"
if zz_new.iloc[j][2] != zz.iloc[i][2]:
zz_new.iat[j,2]="*"
if zz_new.iloc[j][3] != zz.iloc[i][3]:
zz_new.iat[j,3]="*"
if zz_new.iloc[j][4] != zz.iloc[i][4]:
zz_new.iat[j,4]="*"
,但是结果是这样的My anonymized table. I was wondering if you could help me to reach the anonymized table。
您需要做的是遍历每一行并找出哪些行是重复的。有很多方法可以做到这一点,但蛮力算法看起来像这样:
- 启动一个空列表来跟踪 non_duplicate_id
- 遍历每一行并检查是否有一行与当前元素完全相似。
- 如果是有完全相似的元素什么都不做,如果否将这一行的id添加到
non_duplicate_id列表。
- 遍历您的 non_duplicate_id 列表并将每一行设置为两个感兴趣的领域(年龄和教育)的星标
- 保存新的匿名table
但是,此解决方案在第 2 步和第 3 步进行了大量冗余查找,如果您的数据集很大,它可能无法很好地扩展。
使用value_counts()方法:
df
age education
0 30-39 HS-grad
1 40-49 Bachelors
2 30-39 HS-grad
3 30-39 11th
vcnt= df.education.value_counts().eq(1)
HS-grad False
Bachelors True
11th True
Name: education, dtype: bool
df["education"]= df.education.replace(vcnt.loc[vcnt].index,"*")
age education
0 30-39 HS-grad
1 40-49 *
2 30-39 HS-grad
3 30-39 *
everybody.I 需要匿名化 the raw table to make a anonymized table。换句话说,我需要用星星替换不重复的集合。
其实我有运行这个代码:
for j in range(len(zz_new)):
for i in range(len(zz)):
if zz_new.iloc[j][0] != zz.iloc[i][0]:
zz_new.iat[j,0]="*"
if zz_new.iloc[j][1] != zz.iloc[i][1]:
zz_new.iat[j,1]="*"
if zz_new.iloc[j][2] != zz.iloc[i][2]:
zz_new.iat[j,2]="*"
if zz_new.iloc[j][3] != zz.iloc[i][3]:
zz_new.iat[j,3]="*"
if zz_new.iloc[j][4] != zz.iloc[i][4]:
zz_new.iat[j,4]="*"
,但是结果是这样的My anonymized table. I was wondering if you could help me to reach the anonymized table。
您需要做的是遍历每一行并找出哪些行是重复的。有很多方法可以做到这一点,但蛮力算法看起来像这样:
- 启动一个空列表来跟踪 non_duplicate_id
- 遍历每一行并检查是否有一行与当前元素完全相似。
- 如果是有完全相似的元素什么都不做,如果否将这一行的id添加到 non_duplicate_id列表。
- 遍历您的 non_duplicate_id 列表并将每一行设置为两个感兴趣的领域(年龄和教育)的星标
- 保存新的匿名table
但是,此解决方案在第 2 步和第 3 步进行了大量冗余查找,如果您的数据集很大,它可能无法很好地扩展。
使用value_counts()方法:
df
age education
0 30-39 HS-grad
1 40-49 Bachelors
2 30-39 HS-grad
3 30-39 11th
vcnt= df.education.value_counts().eq(1)
HS-grad False
Bachelors True
11th True
Name: education, dtype: bool
df["education"]= df.education.replace(vcnt.loc[vcnt].index,"*")
age education
0 30-39 HS-grad
1 40-49 *
2 30-39 HS-grad
3 30-39 *