Pandas2.2 DataFrame
Conversion
方法 | 描述 |
---|---|
DataFrame.astype(dtype[, copy, errors]) | 用于将 DataFrame 中的数据转换为指定的数据类型 |
DataFrame.convert_dtypes([infer_objects, …]) | 用于将 DataFrame 中的数据类型转换为更合适的类型 |
DataFrame.infer_objects([copy]) | 用于尝试将 DataFrame 中的 object 类型的列转换为更具体的类型(如 int64 、float64 或 boolean ) |
DataFrame.copy([deep]) | 用于创建 DataFrame 的副本 |
pandas.DataFrame.copy
pandas.DataFrame.copy
是一个方法,用于创建 DataFrame 的副本。这个方法可以用于创建浅拷贝或深拷贝,具体取决于 deep
参数的设置。
方法签名
DataFrame.copy(deep=True)
参数说明
deep
: 布尔值,默认为True
,表示是否进行深拷贝。如果设置为True
,则返回一个深拷贝;如果设置为False
,则返回一个浅拷贝。
返回值
- 返回一个新的 DataFrame,该 DataFrame 是原 DataFrame 的副本。
示例
假设有一个 DataFrame 如下:
import pandas as pddata = {'A': [1, 2, 3],'B': [1.1, 2.2, 3.3],'C': ['x', 'y', 'z']
}df = pd.DataFrame(data)
print("原始 DataFrame:")
print(df)
print("\n数据类型:")
print(df.dtypes)
输出:
原始 DataFrame:A B C
0 1 1.1 x
1 2 2.2 y
2 3 3.3 z数据类型:
A int64
B float64
C object
dtype: object
示例1:创建深拷贝
df_deep_copy = df.copy(deep=True)
print("深拷贝后的 DataFrame:")
print(df_deep_copy)
print("\n数据类型:")
print(df_deep_copy.dtypes)
结果:
深拷贝后的 DataFrame:A B C
0 1 1.1 x
1 2 2.2 y
2 3 3.3 z数据类型:
A int64
B float64
C object
dtype: object
示例2:创建浅拷贝
df_shallow_copy = df.copy(deep=False)
print("浅拷贝后的 DataFrame:")
print(df_shallow_copy)
print("\n数据类型:")
print(df_shallow_copy.dtypes)
结果:
浅拷贝后的 DataFrame:A B C
0 1 1.1 x
1 2 2.2 y
2 3 3.3 z数据类型:
A int64
B float64
C object
dtype: object
示例3:修改深拷贝对原 DataFrame 的影响
df_deep_copy['A'][0] = 100
print("修改深拷贝后的 DataFrame:")
print(df_deep_copy)
print("\n原始 DataFrame:")
print(df)
结果:
修改深拷贝后的 DataFrame:A B C
0 100 1.1 x
1 2 2.2 y
2 3 3.3 z原始 DataFrame:A B C
0 1 1.1 x
1 2 2.2 y
2 3 3.3 z
示例4:修改浅拷贝对原 DataFrame 的影响
df_shallow_copy['A'][0] = 200
print("修改浅拷贝后的 DataFrame:")
print(df_shallow_copy)
print("\n原始 DataFrame:")
print(df)
结果:
修改浅拷贝后的 DataFrame:A B C
0 200 1.1 x
1 2 2.2 y
2 3 3.3 z原始 DataFrame:A B C
0 200 1.1 x
1 2 2.2 y
2 3 3.3 z
通过这些示例,可以看到 pandas.DataFrame.copy
方法如何创建 DataFrame 的副本,并且深拷贝和浅拷贝在修改时对原 DataFrame 的影响不同。
注意事项
copy
方法可以创建 DataFrame 的副本。- 设置
deep=True
返回一个深拷贝,这意味着副本和原 DataFrame 完全独立,修改副本不会影响原 DataFrame。 - 设置
deep=False
返回一个浅拷贝,这意味着副本和原 DataFrame 共享数据,修改副本可能会影响原 DataFrame。 - 深拷贝适用于需要完全独立副本的场景,而浅拷贝适用于不需要完全独立副本且希望节省内存的场景。
示例代码及验证
为了验证 pandas.DataFrame.copy
方法的效果,可以运行上述示例代码并查看输出结果。
import pandas as pd# 创建一个示例 DataFrame
data = {'A': [1, 2, 3],'B': [1.1, 2.2, 3.3],'C': ['x', 'y', 'z']
}df = pd.DataFrame(data)
print("原始 DataFrame:")
print(df)
print("\n数据类型:")
print(df.dtypes)# 创建深拷贝
df_deep_copy = df.copy(deep=True)
print("\n深拷贝后的 DataFrame:")
print(df_deep_copy)
print("\n数据类型:")
print(df_deep_copy.dtypes)# 创建浅拷贝
df_shallow_copy = df.copy(deep=False)
print("\n浅拷贝后的 DataFrame:")
print(df_shallow_copy)
print("\n数据类型:")
print(df_shallow_copy.dtypes)# 修改深拷贝对原 DataFrame 的影响
df_deep_copy['A'][0] = 100
print("\n修改深拷贝后的 DataFrame:")
print(df_deep_copy)
print("\n原始 DataFrame:")
print(df)# 修改浅拷贝对原 DataFrame 的影响
df_shallow_copy['A'][0] = 200
print("\n修改浅拷贝后的 DataFrame:")
print(df_shallow_copy)
print("\n原始 DataFrame:")
print(df)
运行结果
运行上述代码后,你会看到以下输出:
原始 DataFrame:A B C
0 1 1.1 x
1 2 2.2 y
2 3 3.3 z数据类型:
A int64
B float64
C object
dtype: object深拷贝后的 DataFrame:A B C
0 1 1.1 x
1 2 2.2 y
2 3 3.3 z数据类型:
A int64
B float64
C object
dtype: object浅拷贝后的 DataFrame:A B C
0 1 1.1 x
1 2 2.2 y
2 3 3.3 z数据类型:
A int64
B float64
C object
dtype: object修改深拷贝后的 DataFrame:A B C
0 100 1.1 x
1 2 2.2 y
2 3 3.3 z原始 DataFrame:A B C
0 1 1.1 x
1 2 2.2 y
2 3 3.3 z修改浅拷贝后的 DataFrame:A B C
0 200 1.1 x
1 2 2.2 y
2 3 3.3 z原始 DataFrame:A B C
0 200 1.1 x
1 2 2.2 y
2 3 3.3 z
通过这些示例,可以看到 pandas.DataFrame.copy
方法如何创建 DataFrame 的副本,并且深拷贝和浅拷贝在修改时对原 DataFrame 的影响不同。