pandas astype coerce 详解

pandas astype coerce 详解

参考:pandas astype coerce

在数据处理和分析中,经常需要对数据的类型进行转换,以满足数据处理或模型输入的需求。Pandas 提供了强大的数据类型转换功能,其中 astype 方法是进行数据类型转换的常用方法之一。本文将详细介绍 astype 方法中的 coerce 参数的使用,以及如何通过它处理数据类型转换中的错误。

1. astype 方法概述

astype 方法用于转换 pandas 对象(如 Series 或 DataFrame)中的数据类型。基本语法如下:

DataFrame.astype(dtype, copy=True, errors='raise')
  • dtype:可以是 Python 类型、NumPy 类型或者字典,指定要转换的目标类型。
  • copy:是否创建原数据的副本。
  • errors:错误处理策略,默认为 ‘raise’,表示转换错误时抛出异常。另外两个可选值为 ‘ignore’ 和 ‘coerce’。

2. 错误处理参数 errors

在使用 astype 方法时,errors 参数控制着当转换失败时的行为:

  • raise:默认值,当转换失败时抛出异常。
  • ignore:忽略转换错误,保留原始数据。
  • coerce:将转换错误设置为 NaN。

下面通过示例详细介绍 coerce 的使用。

3. 使用 coerce 处理转换错误

当我们希望将无法转换的数据标记为缺失值(NaN)而不是抛出错误时,可以使用 coerce 选项。这在清洗数据时特别有用,可以帮助我们识别数据中的异常值。

示例代码

示例 1:基本使用

import pandas as pd
import numpy as np

data = {'col1': ['1', '2', 'three', '4', 'pandasdataframe.com']}
df = pd.DataFrame(data)
df['col1'] = df['col1'].astype(float, errors='coerce')
print(df)

示例 2:多列转换

import pandas as pd
import numpy as np

data = {
    'col1': ['1', '2', 'three', '4', 'pandasdataframe.com'],
    'col2': ['1.1', '2.2', 'three', '4.4', 'pandasdataframe.com']
}
df = pd.DataFrame(data)
df = df.astype({'col1': 'float64', 'col2': 'float64'}, errors='coerce')
print(df)

示例 3:与字典结合使用

import pandas as pd
import numpy as np

data = {
    'col1': ['1', '2', 'three', '4', 'pandasdataframe.com'],
    'col2': ['2021-01-01', '2022-02-02', 'pandasdataframe.com', '2023-03-03', '2024-04-04']
}
df = pd.DataFrame(data)
df = df.astype({'col1': 'float64', 'col2': 'datetime64'}, errors='coerce')
print(df)

示例 4:处理非数值列

import pandas as pd
import numpy as np

data = {
    'col1': ['1', '2', 'three', '4', 'pandasdataframe.com'],
    'col2': ['apple', 'banana', 'cherry', 'date', 'pandasdataframe.com']
}
df = pd.DataFrame(data)
df['col2'] = df['col2'].astype('category', errors='coerce')
print(df)

示例 5:转换失败时填充默认值

import pandas as pd
import numpy as np

data = {
    'col1': ['1', '2', 'three', '4', 'pandasdataframe.com'],
    'col2': ['1.1', '2.2', 'three', '4.4', 'pandasdataframe.com']
}
df = pd.DataFrame(data)
df = df.astype({'col1': 'float64', 'col2': 'float64'}, errors='coerce').fillna(0)
print(df)

更多示例

接下来,我们将继续提供更多使用 coerce 的示例代码,以展示其在不同场景下的应用。

示例 6:整体转换 DataFrame

import pandas as pd
import numpy as np

data = {
    'col1': ['1', '2', 'three', '4', 'pandasdataframe.com'],
    'col2': ['1.1', '2.2', 'three', '4.4', 'pandasdataframe.com'],
    'col3': ['2021-01-01', '2022-02-02', 'pandasdataframe.com', '2023-03-03', '2024-04-04']
}
df = pd.DataFrame(data)
df = df.astype(float, errors='coerce')
print(df)

示例 7:使用字典进行选择性转换

import pandas as pd
import numpy as np

data = {
    'col1': ['1', '2', 'three', '4', 'pandasdataframe.com'],
    'col2': ['1.1', '2.2', 'three', '4.4', 'pandasdataframe.com'],
    'col3': ['2021-01-01', '2022-02-02', 'pandasdataframe.com', '2023-03-03', '2024-04-04']
}
df = pd.DataFrame(data)
df = df.astype({'col1': 'float64', 'col2': 'float64', 'col3': 'datetime64'}, errors='coerce')
print(df)

示例 8:转换并处理特定列

import pandas as pd
import numpy as np

data = {
    'col1': ['1', '2', 'three', '4', 'pandasdataframe.com'],
    'col2': ['1.1', '2.2', 'three', '4.4', 'pandasdataframe.com'],
    'col3': ['2021-01-01', '2022-02-02', 'pandasdataframe.com', '2023-03-03', '2024-04-04']
}
df = pd.DataFrame(data)
df['col3'] = df['col3'].astype('datetime64', errors='coerce')
print(df)

示例 9:转换时忽略错误

import pandas as pd
import numpy as np

data = {
    'col1': ['1', '2', 'three', '4', 'pandasdataframe.com'],
    'col2': ['1.1', '2.2', 'three', '4.4', 'pandasdataframe.com'],
    'col3': ['2021-01-01', '2022-02-02', 'pandasdataframe.com', '2023-03-03', '2024-04-04']
}
df = pd.DataFrame(data)
df = df.astype(float, errors='ignore')
print(df)

Output:

pandas astype coerce 详解

示例 10:混合数据类型

import pandas as pd
import numpy as np

data = {
    'col1': ['1', '2', 'three', '4', 'pandasdataframe.com'],
    'col2': ['1.1', '2.2', 'three', '4.4', 'pandasdataframe.com'],
    'col3': ['2021-01-01', '2022-02-02', 'pandasdataframe.com', '2023-03-03', '2024-04-04']
}
df = pd.DataFrame(data)
df = df.astype({'col1': 'float64', 'col2': 'float64', 'col3': 'datetime64'}, errors='coerce')
print(df)

以上示例展示了如何使用 coerce 在 pandas 中处理数据类型转换的错误,将无法转换的值设置为 NaN,从而避免数据处理过程中的中断。这种方法特别适用于数据清洗和预处理阶段,可以有效地识别和处理数据中的异常值。

示例 11:转换包含混合类型的列

import pandas as pd
import numpy as np

data = {
    'col1': ['1', '2', 'three', '4', 'pandasdataframe.com'],
    'col2': ['1.1', '2.2', 'three', '4.4', 'pandasdataframe.com'],
    'col3': ['2021-01-01', '2022-02-02', 'pandasdataframe.com', '2023-03-03', '2024-04-04']
}
df = pd.DataFrame(data)
df['col1'] = df['col1'].astype(float, errors='coerce')
print(df)

示例 12:转换时间数据

import pandas as pd
import numpy as np

data = {
    'col1': ['1', '2', 'three', '4', 'pandasdataframe.com'],
    'col2': ['2021-01-01', '2022-02-02', 'pandasdataframe.com', '2023-03-03', '2024-04-04']
}
df = pd.DataFrame(data)
df['col2'] = df['col2'].astype('datetime64', errors='coerce')
print(df)

示例 13:转换并填充缺失值

import pandas as pd
import numpy as np

data = {
    'col1': ['1', '2', 'three', '4', 'pandasdataframe.com'],
    'col2': ['1.1', '2.2', 'three', '4.4', 'pandasdataframe.com']
}
df = pd.DataFrame(data)
df = df.astype({'col1': 'float64', 'col2': 'float64'}, errors='coerce').fillna(-1)
print(df)

示例 14:转换多个列并处理异常

import pandas as pd
import numpy as np

data = {
    'col1': ['1', '2', 'three', '4', 'pandasdataframe.com'],
    'col2': ['1.1', '2.2', 'three', '4.4', 'pandasdataframe.com'],
    'col3': ['2021-01-01', '2022-02-02', 'pandasdataframe.com', '2023-03-03', '2024-04-04']
}
df = pd.DataFrame(data)
df = df.astype({'col1': 'float64', 'col2': 'float64', 'col3': 'datetime64'}, errors='coerce')
print(df)

示例 15:转换包含特殊字符的数据列

import pandas as pd
import numpy as np

data = {
    'col1': ['1', '2', 'three', '4', 'pandasdataframe.com'],
    'col2': ['1.1', '2.2', 'three', '4.4', 'pandasdataframe.com'],
    'col3': ['2021-01-01', '2022-02-02', 'pandasdataframe.com', '2023-03-03', '2024-04-04']
}
df = pd.DataFrame(data)
df['col3'] = df['col3'].astype('datetime64', errors='coerce')
print(df)

示例 16:转换时使用不同的错误处理策略

import pandas as pd
import numpy as np

data = {
    'col1': ['1', '2', 'three', '4', 'pandasdataframe.com'],
    'col2': ['1.1', '2.2', 'three', '4.4', 'pandasdataframe.com'],
    'col3': ['2021-01-01', '2022-02-02', 'pandasdataframe.com', '2023-03-03', '2024-04-04']
}
df = pd.DataFrame(data)
df = df.astype({'col1': 'float64', 'col2': 'float64', 'col3': 'datetime64'}, errors='ignore')
print(df)

Output:

pandas astype coerce 详解

示例 17:处理具有不同数据类型的 DataFrame

import pandas as pd
import numpy as np

data = {
    'col1': ['1', '2', 'three', '4', 'pandasdataframe.com'],
    'col2': ['1.1', '2.2', 'three', '4.4', 'pandasdataframe.com'],
    'col3': ['2021-01-01', '2022-02-02', 'pandasdataframe.com', '2023-03-03', '2024-04-04']
}
df = pd.DataFrame(data)
df = df.astype({'col1': 'float64', 'col2': 'float64', 'col3': 'datetime64'}, errors='coerce')
print(df)

示例 18:转换时显式指定数据类型

import pandas as pd
import numpy as np

data = {
    'col1': ['1', '2', 'three', '4', 'pandasdataframe.com'],
    'col2': ['1.1', '2.2', 'three', '4.4', 'pandasdataframe.com'],
    'col3': ['2021-01-01', '2022-02-02', 'pandasdataframe.com', '2023-03-03', '2024-04-04']
}
df = pd.DataFrame(data)
df = df.astype({'col1': np.float64, 'col2': np.float64, 'col3': np.datetime64}, errors='coerce')
print(df)

示例 19:转换包含混合数据类型的列

import pandas as pd
import numpy as np

data = {
    'col1': ['1', '2', 'three', '4', 'pandasdataframe.com'],
    'col2': ['1.1', '2.2', 'three', '4.4', 'pandasdataframe.com'],
    'col3': ['2021-01-01', '2022-02-02', 'pandasdataframe.com', '2023-03-03', '2024-04-04']
}
df = pd.DataFrame(data)
df['col1'] = df['col1'].astype(float, errors='coerce')
print(df)

示例 20:转换并处理包含特殊字符的数据

import pandas as pd
import numpy as np

data = {
    'col1': ['1', '2', 'three', '4', 'pandasdataframe.com'],
    'col2': ['1.1', '2.2', 'three', '4.4', 'pandasdataframe.com'],
    'col3': ['2021-01-01', '2022-02-02', 'pandasdataframe.com', '2023-03-03', '2024-04-04']
}
df = pd.DataFrame(data)
df = df.astype({'col1': 'float64', 'col2': 'float64', 'col3': 'datetime64'}, errors='coerce')
print(df)

以上示例展示了如何在不同的数据处理场景中使用 coerce 选项来安全地处理数据类型转换,确保数据的整洁性和一致性。通过这些示例,我们可以看到 coerce 在数据预处理和清洗中的重要作用,它帮助我们避免了因数据类型不匹配而导致的程序错误,提高了数据处理的效率和可靠性。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程