如何在Pandas中获取多值?拆分文件名遇KeyError的解决方法
解决文件名拆分时的KeyError问题
嘿,这个问题我之前也碰到过!咱们来一步步捋清楚:
你遇到的KeyError: "['name' 'type'] not in index",核心原因是你用str.split('.')返回的不是能直接拆分成两列的DataFrame——默认情况下这个方法返回的是一个包含列表的Series,没法直接赋值给新的列名。
正确的处理方法有两种,按需选就行:
方法1:给split加上expand=True和n=1参数
expand=True会让split返回一个多列的DataFrame,而n=1限制只按第一个点分割(避免文件名里有多个点时把名称拆碎),代码如下:
df[['name', 'type']] = df['full_name'].str.split('.', n=1, expand=True)
用你的测试数据跑的话,会生成正确的name列(ocean、mountain...)和type列(jpg、png...)。
方法2:用正则表达式提取(更稳妥)
如果担心文件名里有多个点(比如report.v2.pdf这种),用str.extract匹配最后一个点前后的内容更靠谱:
df[['name', 'type']] = df['full_name'].str.extract(r'^(.*)\.(.*)$', expand=True)
这个正则会把最后一个点前面的所有内容作为name,后面的作为type,完美处理复杂文件名的情况。
验证一下结果
处理后你的DataFrame会变成这样:
| full_name | name | type |
|---|---|---|
| ocean.jpg | ocean | jpg |
| mountain.png | mountain | png |
| forest.gif | forest | gif |
| river.mp4 | river | mp4 |
| animal.avi | animal | avi |
| girl.pdf | girl |
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

