如何用Pandas批量截断指定字符串列的过长内容?
解决方案
针对你的需求,这里提供两种简洁高效的实现方式,均基于Pandas矢量化操作,比逐行apply的处理效率高得多:
方式一:直接遍历指定列处理(推荐)
这种方式直观易懂,直接针对字典内的列逐一处理,效率最优:
columns_dict = {'col1':100, 'col2':500, 'col3':500} # 遍历每个需要截断的列和对应的长度 for col_name, max_length in columns_dict.items(): # 填充空值并转为字符串类型,避免非字符串列或空值报错 df[col_name] = df[col_name].fillna('').astype(str) # 截断字符串至指定长度 df[col_name] = df[col_name].str.slice(start=0, stop=max_length)
方式二:用apply按列批量处理
如果希望自动适配所有列(仅处理字典中存在的列,其余列保持原样),可以用按列apply实现:
columns_dict = {'col1':100, 'col2':500, 'col3':500} def slice_column(col): # 获取当前列对应的截断长度,不在字典中则返回原列 max_len = columns_dict.get(col.name) if max_len: return col.fillna('').astype(str).str.slice(0, max_len) return col # 对整个DataFrame按列应用处理逻辑 df = df.apply(slice_column)
关键注意点
- 用
fillna('')填充空值,避免把NaN转为字符串'NaN'后被截断; - 用
astype(str)确保列是字符串类型,防止非字符串列(比如数值列)调用str.slice时报错; - 避免使用
apply(axis=1)逐行处理,这种方式是逐行循环,对100多列的DataFrame效率极低,远不如矢量化操作。
内容的提问来源于stack exchange,提问作者Geosphere
相关产品推荐
相关产品推荐

