glassonion1 / anonypy

Anonymization library for python. Protect the privacy of individuals.
MIT License
25 stars 10 forks source link

Example in README returns error #1

Open CurtLH opened 2 years ago

CurtLH commented 2 years ago

I'm hoping to learn how to use this package, but when I run the example in the README, I get the following error:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
Input In [2], in <cell line: 1>()
----> 1 main()

Input In [1], in main()
     26 sensitive_column = "col4"
     28 p = anonypy.Preserver(df, feature_columns, sensitive_column)
---> 29 rows = p.anonymize_k_anonymity(k=2)
     31 dfn = pd.DataFrame(rows)
     32 print(dfn)

File ~/miniconda3/envs/ppla-dev2/lib/python3.8/site-packages/anonypy/anonypy.py:18, in Preserver.anonymize_k_anonymity(self, k)
     17 def anonymize_k_anonymity(self, k):
---> 18     return self.__anonymize(k)

File ~/miniconda3/envs/ppla-dev2/lib/python3.8/site-packages/anonypy/anonypy.py:10, in Preserver.__anonymize(self, k, l, p)
      8 def __anonymize(self, k, l=0, p=0.0):
      9     partitions = self.modrian.partition(k, l, p)
---> 10     return anonymize(
     11         self.modrian.df,
     12         partitions,
     13         self.modrian.feature_columns,
     14         self.modrian.sensitive_column,
     15     )

File ~/miniconda3/envs/ppla-dev2/lib/python3.8/site-packages/anonypy/anonypy.py:79, in anonymize(df, partitions, feature_columns, sensitive_column, max_partitions)
     75 grouped_columns = df.loc[partition].agg(aggregations, squeeze=False)
     76 sensitive_counts = (
     77     df.loc[partition].groupby(sensitive_column).agg({sensitive_column: "count"})
     78 )
---> 79 values = grouped_columns.iloc[0].to_dict()
     80 for sensitive_value, count in sensitive_counts[sensitive_column].items():
     81     if count == 0:

AttributeError: 'list' object has no attribute 'to_dict'
gianmarcoaversanoenx commented 1 year ago

+1

MorTzadok commented 1 year ago

+1

AshtonIzmev commented 7 months ago

I had the same problem but when I tried to debug the code locally (using a single file containing all concatenated functions), it worked.

IamWorld commented 6 months ago

I was able to make it work, I had to change the file anonypy.py on the lines 79 and 108

Replacing this line

values = grouped_columns.iloc[0].to_dict()

with this one

values= {} for name,val in grouped_columns.items(): values[name] = val[0]

Hope it helps.

glassonion1 commented 13 hours ago

Thank you for all the messages. I've updated the dependent libraries and resolved the errors. I just released version 0.2.1, so please try using it.