如何对Pandas DataFrame所有列的单元格提取指定字符?
Pandas DataFrame全列提取部分字符的解决方案
你遇到的TypeError: type 'str' is not subscriptable错误,是因为str[:1]直接操作了字符串类型本身,而非针对每个单元格的字符串实例。map方法需要传入可调用的函数,这种类型下标操作是非法的。
下面是两种可行的解决方法:
方法一:使用applymap遍历每个单元格
applymap会对DataFrame中的每个元素执行指定函数,适合需要统一处理所有单元格的场景:
import pandas as pd data = [['tom', 'jerry'], ['nick', 'fury'], ['juli', 'anna']] df = pd.DataFrame(data, columns=['Name', 'Name2']) # 提取每个单元格的第一个字符 df3 = df.applymap(lambda x: x[:1]) print(df3)
如果DataFrame中存在非字符串类型的单元格,可以先统一转为字符串再处理:
df3 = df.astype(str).applymap(lambda x: x[:1])
方法二:使用apply结合str访问器
针对所有列都是字符串类型的场景,用apply对每列调用str[:1],和单列处理逻辑一致:
df3 = df.apply(lambda col: col.str[:1]) print(df3)
这种方法贴合Pandas针对字符串列的优化,执行效率可能更高。
两种方法的输出结果一致:
Name Name2 0 t j 1 n f 2 j a
内容的提问来源于stack exchange,提问作者ktp89
相关产品推荐
相关产品推荐

