• Python简单数据清洗


    我们从网上爬取好的数据,看起来会很乱,我们需要对数据进行再次加工,筛选出我们需要的数据,此时就需要对数据进行清洗。

    一点数据清洗对于后续的数据分析来说至关重要。Python中进行数据清洗的工具是Pandas。接下来我就来介绍一下如何使用Python简单地对凌乱的数据进行清洗。

    首先我们需要以下从几个方面判断我们需要清洗的数据:

    1、数据的完整性:检查数据是否有空值或缺失

    2、数据的全面性:检查同类数据的单位是否是一致的,比如体重有Kg和g,身高有M和CM

    3、数据的合法性:检查数据是否合法,如存在非ASCII码字符或者非法字符

    4、数据的唯一性:检查数据是否有重复

    考虑好这些问题后我们把需要清洗的内容列出一张清单,并按照清单进行清洗。

    以下是实际清洗流程:

    第一步,下载pandas包,可以使用pycharm->setting->python interpreter直接下载,也可以在终端输入pip3 install pandas下载

    第二步,导包

    1. import pandas as pd
    2. from pandas import Series,DataFrame

    第三步,开始清洗,示例代码如下:

    1. import pandas as pd
    2. from pandas import Series,DataFrame
    3. def clean():
    4. df = DataFrame(pd.read_excel('./cleantest.xlsx'))
    5. #对列进行重命名
    6. df.rename(columns={0:'姓名', 1:'性别', 2:'年龄',3:'体重',4:'身高'},inplace=True)
    7. #对整行为空值的数据进行删除
    8. df.dropna(how='all',inplace=True)
    9. #使用平均值来填充体重缺失的值
    10. df[u'体重'].fillna(int(df[u'体重'].mean()),inplace=True)
    11. #对身高列的度量做统一,我们使用df.apply方法来统一身高的度量,使用df.columns.str.upper方法将首字母统一为大写
    12. def format_height(df):
    13. if(df['身高']<3):
    14. return df['身高'] * 100
    15. else:
    16. return df['身高']
    17. df['身高'] = df.apply(format_height,axis=1)
    18. #2 姓名首字母大小写不统一,统一成首字母大写
    19. df.columns = df.columns.str.upper()
    20. #对姓名列的非法字符做过滤,我们可以使用df.replace方法,删除字母前面的空格,我们可以使用df.map方法
    21. #1、英文字母出现中文->删除非ASCLL码的字符
    22. df['姓名'].replace({r'[^\x00-\x7f]+':''},regex=True,inplace=True)
    23. #2、英文名字出现了问号->删除问号
    24. df['姓名'].replace({r'\?+':''},regex=True,inplace=True)
    25. #3、名字前出现空格->删除空格
    26. df['姓名'] = df['姓名'].map(str.lstrip)
    27. #将年龄列为负值的年龄处理为正数,我们可以使用df.apply方法:
    28. def format_sex(df):
    29. return abs(df['年龄'])
    30. df['年龄'] = df.apply(format_sex,axis=1)
    31. #删除行记录重复的数据,我们可以使用df.drop_duplicates方法:
    32. df.drop_duplicates(['姓名'],inplace=True)
    33. #我们讲清洗好的数据保存至新的excel中,我们可以使用df.to_excel方法:
    34. df.to_excel('./data02.xlsx',index=False)
    35. if __name__ == '__main__':
    36. clean()

    pandas的一些常用方法:

    1)从excel中加载数据到DataFrame,pandas.read_excel('文档位置')

    2)对列进行重命名,rename

    1. def rename(
    2. self,
    3. mapper: Renamer | None = None,
    4. *,
    5. index: Renamer | None = None,
    6. columns: Renamer | None = None,
    7. axis: Axis | None = None,
    8. copy: bool = True,
    9. inplace: bool = False,
    10. level: Level | None = None,
    11. errors: str = "ignore",
    12. ) -> DataFrame | None:

    3)删除空值,dropna

    1. def dropna(
    2. self,
    3. axis: Axis = 0,
    4. how: str = "any",
    5. thresh=None,
    6. subset: IndexLabel = None,
    7. inplace: bool = False,
    8. ):

    4)填充值,fillna

    1. def fillna(
    2. self,
    3. value: object | ArrayLike | None = None,
    4. method: FillnaOptions | None = None,
    5. axis=None,
    6. inplace=False,
    7. limit=None,
    8. downcast=None,
    9. ) -> Series | None:
    10. return super().fillna(
    11. value=value,
    12. method=method,
    13. axis=axis,
    14. inplace=inplace,
    15. limit=limit,
    16. downcast=downcast,
    17. )

    5)将首字母统一为大写,columns.str.upper

    6)  过滤非法字符replace

    1. def replace(
    2. self,
    3. to_replace=None,
    4. value=lib.no_default,
    5. inplace=False,
    6. limit=None,
    7. regex=False,
    8. method: str | lib.NoDefault = lib.no_default,
    9. ):
    10. return super().replace(
    11. to_replace=to_replace,
    12. value=value,
    13. inplace=inplace,
    14. limit=limit,
    15. regex=regex,
    16. method=method,
    17. )

    7)  删除空格,map

    1. def map(self, arg, na_action=None) -> Series:
    2. new_values = self._map_values(arg, na_action=na_action)
    3. return self._constructor(new_values, index=self.index).__finalize__(
    4. self, method="map"
    5. )

    8)将正负值转换,apply

    1. def apply(
    2. self,
    3. func: AggFuncType,
    4. axis: Axis = 0,
    5. raw: bool = False,
    6. result_type=None,
    7. args=(),
    8. **kwargs,
    9. ):
    10. from pandas.core.apply import frame_apply
    11. op = frame_apply(
    12. self,
    13. func=func,
    14. axis=axis,
    15. raw=raw,
    16. result_type=result_type,
    17. args=args,
    18. kwargs=kwargs,
    19. )
    20. return op.apply().__finalize__(self, method="apply")

    9)删除行记录重复的数据,drop_duplicates

    1. def drop_duplicates(
    2. self,
    3. subset: Hashable | Sequence[Hashable] | None = None,
    4. keep: Literal["first"] | Literal["last"] | Literal[False] = "first",
    5. inplace: bool = False,
    6. ignore_index: bool = False,
    7. ) -> DataFrame | None:
    8. if self.empty:
    9. return self.copy()
    10. inplace = validate_bool_kwarg(inplace, "inplace")
    11. ignore_index = validate_bool_kwarg(ignore_index, "ignore_index")
    12. duplicated = self.duplicated(subset, keep=keep)
    13. result = self[-duplicated]
    14. if ignore_index:
    15. result.index = default_index(len(result))
    16. if inplace:
    17. self._update_inplace(result)
    18. return None
    19. else:
    20. return result

    10)清洗好的数据保存至新的excel中,to_excel

    第四步,去新的excel中查看数据是否清洗完成。

    简单地数据清洗就介绍到这里了,经过清洗后的数据更加方便我们进行数据分析。

  • 相关阅读:
    TCP服务器使用多路复用
    好好回答下 TCP 和 UDP 的区别
    MindSpore端侧手机应用实战:AI垃圾分类应用
    c++中的重载
    【Django】开发日报_2.1_Day:数据库操作
    设计模式 23 访问者模式
    mulesoft Module 13 quiz 解析
    python容器之列表(list)
    Vue源码实现之watcher拾遗
    Qt开发及建立工程
  • 原文地址:https://blog.csdn.net/CoCo629vanilla/article/details/126269530