本文共 1899 字,大约阅读时间需要 6 分钟。
数据清洗是数据分析工作中的关键步骤,直接影响后续处理的效果。完成数据清洗后,我们可以更有效地执行数据分析、挖掘等 operations。数据清洗本身也是一个迭代的过程,在实际项目中通常需要多次对数据进行清洗和调整,使其适用于接下来的分析任务。
以下分为几个部分详细讨论如何进行数据清洗和处理:
在数据清洗过程中,缺失数据是一个常见问题。我们可以通过以下方法来处理缺失数据:
pd.fillna()
方法填充缺失值。这种方法默认会将缺失值替换为 None
,但可以根据需要指定填充值。pd.dropna()
方法删除包含缺失值的行。示例:
import pandas as pddf_example = pd.DataFrame({ 'A': ['a', 'b', None], 'B': [2, 4, None]})print(df_example)# A B# 0 a 2# 1 b 4# 2 NaN NaNdf_example.dropna(inplace=True)print(df_example)# A B# 0 a 2# 1 b 4
数据转换是通过 pandas
的高级函数来实现的,下面是几个常用的方法:
使用 duplicated()
方法可以检测重复行:
import pandas as pddf = pd.DataFrame({ 'data1': ['a'] * 4 + ['b'] * 4, 'data2': pdايات agedint(0, 4, 8)})print(df)# data1 data20 a 31 a 22 a 33 a 34 b 15 b 06 b 37 b 0df.duplicated()# 0 False# 1 False# 2 True# 3 True# 4 False# 5 False# 6 False
// 使用 drop_duplicates()
方法删除重复行:
df = df.drop_duplicates()# 结果如下:# data1 data20 a 31 a 22 b 15 b 06 b 3
使用 map()
方法对数据进行映射转换:
import pandas as pdser_obj = pd.Series( pd.int64_dtype, np.random.randint(0, 10, 10))print(ser_obj)# 0 11 42 83 64 85 66 67 48 79 3ser_obj.map(lambda x: x ** 2)# 结果如下:# 0 11 162 643 364 645 366 367 168 499 9
使用 replace()
方法替换数据:
ser_obj.replace(1, -100)
ser_obj.replace([6,8], -100)ser_obj.replace([4,7], [-100, -200])
对于字符串数据,pandas
提供了丰富的字符串操作方法。
str.replace()
str.find()
str.split()
str.upper()
和 str.lower()
str.strip()
str.findall()
和 str.find()
re.search()
pandas
字符函数str accessor
e.g., df['column'].str.replace(...)
通过以上方法,我们可以对字符串数据进行丰富的操作,从而提升数据处理的效率和效果。
转载地址:http://wysoz.baihongyu.com/