【Pandas】pandas DataFrame convert_dtypes

Pandas2.2 DataFrame

Conversion

方法描述
DataFrame.astype(dtype[, copy, errors])用于将 DataFrame 中的数据转换为指定的数据类型
DataFrame.convert_dtypes([infer_objects, …])用于将 DataFrame 中的数据类型转换为更合适的类型

pandas.DataFrame.convert_dtypes

pandas.DataFrame.convert_dtypes 是一个方法,用于将 DataFrame 中的数据类型转换为更合适的类型。这个方法可以帮助自动推断和转换数据类型,使得数据处理更加高效和准确。

方法签名
DataFrame.convert_dtypes(infer_objects=True, convert_string=True, convert_integer=True, convert_boolean=True, convert_floating=True, dtype_backend='numpy_nullable')
参数说明
  • infer_objects: 布尔值,默认为 True,表示是否尝试将 object 类型的列转换为更具体的类型(如 int64float64)。
  • convert_string: 布尔值,默认为 True,表示是否将 object 类型的列转换为 string 类型。
  • convert_integer: 布尔值,默认为 True,表示是否将 object 类型的列转换为 integer 类型。
  • convert_boolean: 布尔值,默认为 True,表示是否将 object 类型的列转换为 boolean 类型。
  • convert_floating: 布尔值,默认为 True,表示是否将 object 类型的列转换为 floating 类型。
  • dtype_backend: 字符串,默认为 'numpy_nullable',表示使用的数据类型后端。可以是 'numpy_nullable''pyarrow'
返回值
  • 返回一个新的 DataFrame,其中数据类型已转换。
示例

假设有一个 DataFrame 如下:

import pandas as pd

data = {
    'A': ['1', '2', '3'],
    'B': ['1.1', '2.2', '3.3'],
    'C': ['True', 'False', 'True'],
    'D': ['x', 'y', 'z']
}

df = pd.DataFrame(data)
print("原始 DataFrame:")
print(df)
print("\n数据类型:")
print(df.dtypes)

输出:

原始 DataFrame:
   A    B      C  D
0  1  1.1   True  x
1  2  2.2  False  y
2  3  3.3   True  z

数据类型:
A    object
B    object
C    object
D    object
dtype: object
示例1:使用默认参数转换数据类型
df_converted = df.convert_dtypes()
print("转换后的 DataFrame:")
print(df_converted)
print("\n数据类型:")
print(df_converted.dtypes)

结果:

转换后的 DataFrame:
   A    B      C  D
0  1  1.1   True  x
1  2  2.2  False  y
2  3  3.3   True  z

数据类型:
A    Int64
B  Float64
C    boolean
D    string
dtype: object
示例2:禁用 convert_string
df_converted_no_string = df.convert_dtypes(convert_string=False)
print("禁用 convert_string 后的 DataFrame:")
print(df_converted_no_string)
print("\n数据类型:")
print(df_converted_no_string.dtypes)

结果:

禁用 convert_string 后的 DataFrame:
   A    B      C  D
0  1  1.1   True  x
1  2  2.2  False  y
2  3  3.3   True  z

数据类型:
A    Int64
B  Float64
C    boolean
D    object
dtype: object
示例3:禁用 convert_integer
df_converted_no_integer = df.convert_dtypes(convert_integer=False)
print("禁用 convert_integer 后的 DataFrame:")
print(df_converted_no_integer)
print("\n数据类型:")
print(df_converted_no_integer.dtypes)

结果:

禁用 convert_integer 后的 DataFrame:
   A    B      C  D
0  1  1.1   True  x
1  2  2.2  False  y
2  3  3.3   True  z

数据类型:
A    object
B  Float64
C    boolean
D    string
dtype: object
示例4:禁用 convert_boolean
df_converted_no_boolean = df.convert_dtypes(convert_boolean=False)
print("禁用 convert_boolean 后的 DataFrame:")
print(df_converted_no_boolean)
print("\n数据类型:")
print(df_converted_no_boolean.dtypes)

结果:

禁用 convert_boolean 后的 DataFrame:
   A    B      C  D
0  1  1.1   True  x
1  2  2.2  False  y
2  3  3.3   True  z

数据类型:
A    Int64
B  Float64
C    object
D    string
dtype: object
示例5:禁用 convert_floating
df_converted_no_floating = df.convert_dtypes(convert_floating=False)
print("禁用 convert_floating 后的 DataFrame:")
print(df_converted_no_floating)
print("\n数据类型:")
print(df_converted_no_floating.dtypes)

结果:

禁用 convert_floating 后的 DataFrame:
   A    B      C  D
0  1  1.1   True  x
1  2  2.2  False  y
2  3  3.3   True  z

数据类型:
A    Int64
B    object
C    boolean
D    string
dtype: object

通过这些示例,可以看到 pandas.DataFrame.convert_dtypes 方法如何自动推断和转换 DataFrame 中的数据类型。这些方法在数据预处理和类型转换时非常有用。

注意事项
  • convert_dtypes 方法可以将 DataFrame 中的数据类型转换为更合适的类型。
  • 可以通过设置不同的参数来控制哪些类型的转换应该被启用或禁用。
  • dtype_backend 参数可以指定使用的数据类型后端,例如 'numpy_nullable''pyarrow'
  • 这些转换可以帮助提高数据处理的效率和准确性。
示例代码及验证

为了验证 pandas.DataFrame.convert_dtypes 方法的效果,可以运行上述示例代码并查看输出结果。

import pandas as pd

# 创建一个示例 DataFrame
data = {
    'A': ['1', '2', '3'],
    'B': ['1.1', '2.2', '3.3'],
    'C': ['True', 'False', 'True'],
    'D': ['x', 'y', 'z']
}

df = pd.DataFrame(data)
print("原始 DataFrame:")
print(df)
print("\n数据类型:")
print(df.dtypes)

# 使用默认参数转换数据类型
df_converted = df.convert_dtypes()
print("\n转换后的 DataFrame:")
print(df_converted)
print("\n数据类型:")
print(df_converted.dtypes)

# 禁用 convert_string
df_converted_no_string = df.convert_dtypes(convert_string=False)
print("\n禁用 convert_string 后的 DataFrame:")
print(df_converted_no_string)
print("\n数据类型:")
print(df_converted_no_string.dtypes)

# 禁用 convert_integer
df_converted_no_integer = df.convert_dtypes(convert_integer=False)
print("\n禁用 convert_integer 后的 DataFrame:")
print(df_converted_no_integer)
print("\n数据类型:")
print(df_converted_no_integer.dtypes)

# 禁用 convert_boolean
df_converted_no_boolean = df.convert_dtypes(convert_boolean=False)
print("\n禁用 convert_boolean 后的 DataFrame:")
print(df_converted_no_boolean)
print("\n数据类型:")
print(df_converted_no_boolean.dtypes)

# 禁用 convert_floating
df_converted_no_floating = df.convert_dtypes(convert_floating=False)
print("\n禁用 convert_floating 后的 DataFrame:")
print(df_converted_no_floating)
print("\n数据类型:")
print(df_converted_no_floating.dtypes)
运行结果

运行上述代码后,你会看到以下输出:

原始 DataFrame:
   A    B      C  D
0  1  1.1   True  x
1  2  2.2  False  y
2  3  3.3   True  z

数据类型:
A    object
B    object
C    object
D    object
dtype: object

转换后的 DataFrame:
   A    B      C  D
0  1  1.1   True  x
1  2  2.2  False  y
2  3  3.3   True  z

数据类型:
A    Int64
B  Float64
C    boolean
D    string
dtype: object

禁用 convert_string 后的 DataFrame:
   A    B      C  D
0  1  1.1   True  x
1  2  2.2  False  y
2  3  3.3   True  z

数据类型:
A    Int64
B  Float64
C    boolean
D    object
dtype: object

禁用 convert_integer 后的 DataFrame:
   A    B      C  D
0  1  1.1   True  x
1  2  2.2  False  y
2  3  3.3   True  z

数据类型:
A    object
B  Float64
C    boolean
D    string
dtype: object

禁用 convert_boolean 后的 DataFrame:
   A    B      C  D
0  1  1.1   True  x
1  2  2.2  False  y
2  3  3.3   True  z

数据类型:
A    Int64
B  Float64
C    object
D    string
dtype: object

禁用 convert_floating 后的 DataFrame:
   A    B      C  D
0  1  1.1   True  x
1  2  2.2  False  y
2  3  3.3   True  z

数据类型:
A    Int64
B    object
C    boolean
D    string
dtype: object

通过这些示例,可以看到 pandas.DataFrame.convert_dtypes 方法如何自动推断和转换 DataFrame 中的数据类型。这些方法在数据预处理和类型转换时非常有用。

### 如何在 Pandas 中转换 DataFrame 的数据格式 #### 使用 `astype()` 方法进行基本类型转换 为了将 DataFrame 列的数据类型从一种类型转换为另一种,`pandas` 提供了简便的方法——`astype()` 函数。此函数允许指定目标数据类型作为参数传递给它。 对于简单的数值或字符串到其他基础类型的转换,可以直接应用该方法: ```python import pandas as pd data = { 'ID': [1, 2, 3], 'Value': ['1', '2', '3'] } df = pd.DataFrame(data) # 将 'Value' 列由字符串转成整型 df['Value'] = df['Value'].astype(int) ``` #### 处理带有特殊字符的数值表示法 当面对包含非标准数值表达式的列时(例如带单位的金额),则需先清理再转换。下面的例子展示了如何处理含有财务缩写的字段[^2]: ```python import pandas as pd import numpy as np data = { 'ID': [1, 2, 3, 4, 5, 6], 'EVENT_TYPE': ['Flood', 'Hail', 'Fire', 'Tornado', 'Flood', 'Fire'], 'Property_Damage': ['2.5K', 0, '.4M', "1.00K", np.nan, "1K"] } def convert_to_numeric(value): multipliers = {'K': 1e3, 'M': 1e6} try: if isinstance(value, str): last_char = value[-1].upper() multiplier = multipliers.get(last_char, None) if multiplier is not None: return float(value[:-1]) * multiplier elif pd.isna(value): return np.nan return float(value) except (TypeError, ValueError): return np.nan df = pd.DataFrame(data) df['Property_Damage'] = df['Property_Damage'].apply(convert_to_numeric).fillna(0).astype(float) ``` #### 转换日期时间格式 如果需要更改现有 datetime 类型列的时间显示方式,则可以通过设置自定义格式化器实现这一点[^1]: ```python import pandas as pd dates = ["2023-09-08 17:00:00", "2023-09-09 18:30:00"] df_dates = pd.DataFrame(dates, columns=['DateTime']) df_dates['Formatted_DateTime'] = pd.to_datetime(df_dates['DateTime']).dt.strftime('%Y-%m-%d %I:%M%p') ``` 以上三种情况涵盖了常见的几种场景下对 DataFrame 进行数据格式转换的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liuweidong0802

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值