如何直接创建string类型列而非object类型列(无需转换)
是否可以基于单个字符串值直接创建默认即为string类型而非object类型的列?object类型列内存占用过高,且不想花费时间将其转换为string类型。
尝试1:直接赋值单个字符串
df = pd.DataFrame(dict(a=range(10))) df["new"] = "my string" df.info()
输出:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10 entries, 0 to 9
Data columns (total 2 columns):Column Non-Null Count Dtype0 a 10 non-null int64
1 new 10 non-null object
dtypes: int64(1), object(1)
memory usage: 288.0+ bytes
尝试2:先初始化空string列再赋值
初始化代码:
df = pd.DataFrame(dict(a=range(10))) df["new"] = pd.Series(dtype="string") df.info()
初始状态输出:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10 entries, 0 to 9
Data columns (total 2 columns):Column Non-Null Count Dtype0 a 10 non-null int64
1 new 0 non-null string
dtypes: int64(1), string(1)
memory usage: 288.0 bytes
赋值代码:
df["new"] = "my string" df.info()
赋值后输出:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10 entries, 0 to 9
Data columns (total 2 columns):Column Non-Null Count Dtype0 a 10 non-null int64
1 new 10 non-null object
dtypes: int64(1), object(1)
memory usage: 288.0+ bytes
现有可行但代码量较大的方法
df = pd.DataFrame(dict(a=range(10))) df["new"] = pd.Series(["my string"] * len(df), dtype="string", index=df.index) df.info()
输出:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10 entries, 0 to 9
Data columns (total 2 columns):Column Non-Null Count Dtype0 a 10 non-null int64
1 new 10 non-null string
dtypes: int64(1), string(1)
memory usage: 288.0 bytes
更简洁的实现方法
方法1:直接构造匹配索引的string类型Series
无需手动生成重复列表,通过指定index让Series自动匹配DataFrame行数:
df = pd.DataFrame(dict(a=range(10))) df["new"] = pd.Series("my string", index=df.index, dtype="string") df.info()
执行后new列会直接是string类型,代码更简洁。
方法2:赋值后快速转换类型
如果接受一行转换代码,这种方式直观且开销极低(单一值列的转换几乎无耗时):
df = pd.DataFrame(dict(a=range(10))) df["new"] = "my string" df["new"] = df["new"].astype("string") df.info()
内容的提问来源于stack exchange,提问作者KG in Chicago

