如何在Pandas中拆分文本列且避免‘Columns must be same length as key’错误?
解决拆分DataFrame列时的ValueError错误
问题描述
尝试将DataFrame的Score列以“-”为分隔符拆分为Home_Score和Away_Score两列,运行以下代码时收到ValueError: Columns must be same length as key错误:
epl_results_2015_22[['Home_Score','Away_Score']] = epl_results_2015_22.Score.str.split("-", expand=True)
涉及的DataFrameepl_results_2015_22数据类型如下:
Wk float64 Day object Date datetime64[ns] Time object Home object Score object Away object dtype: object
DataFrame前几行数据示例:
| Wk | Day | Date | Time | Home | Score | Away |
|---|---|---|---|---|---|---|
| 0 | 1.0 | Fri | 2021-08-13 | 20:00 (15:00) | Brentford | 2–0 |
| 1 | 1.0 | Sat | 2021-08-14 | 12:30 (07:30) | Manchester Utd | 5–1 |
| 2 | 1.0 | Sat | 2021-08-14 | 15:00 (10:00) | Leicester City | 1–0 |
| 3 | 1.0 | Sat | 2021-08-14 | 15:00 (10:00) | Burnley | 1–2 |
| 4 | 1.0 | Sat | 2021-08-14 | 15:00 (10:00) | Chelsea | 3–0 |
问题原因
观察数据中的Score列可以发现,分隔符并非英文减号-,而是中文破折号–(英文减号是短横线,中文破折号长度更长)。用英文减号拆分时无法匹配到分隔符,导致拆分后仅生成1列,但代码试图赋值给2列,因此触发ValueError。
解决方案
将拆分时的分隔符替换为中文破折号–即可:
epl_results_2015_22[['Home_Score','Away_Score']] = epl_results_2015_22.Score.str.split("–", expand=True)
如果担心数据中同时存在两种分隔符,可以用正则表达式匹配两种符号:
epl_results_2015_22[['Home_Score','Away_Score']] = epl_results_2015_22.Score.str.split(r"[-–]", expand=True)
拆分完成后,建议将新列转换为数值类型,方便后续分析:
epl_results_2015_22[['Home_Score','Away_Score']] = epl_results_2015_22[['Home_Score','Away_Score']].astype(int)
内容的提问来源于stack exchange,提问作者michaelkhos
相关产品推荐
相关产品推荐

