如何拆分DataFrame列并合并回原表?merge无匹配列问题求解
解决DataFrame拆分位置列后合并的问题
嘿,我来帮你搞定这个问题~你遇到的报错是因为merge方法默认会寻找两个DataFrame中列名完全相同的列作为合并依据,但你的playerData和拆分出来的secondData没有共同的列(除了行索引,但merge默认不会用索引当合并键),所以才会提示“无匹配列”。
其实完全不需要用merge,因为拆分后的secondData和原playerData的行是一一对应的,直接把新列加到原DataFrame里,或者用join基于索引合并就好,下面给你两种实用方案:
方案1:直接添加拆分后的列到原DataFrame
这是最简洁高效的方式,一步到位:
import pandas as pd filename = "DKSalaries.csv" playerData = pd.read_csv(filename) # 拆分RosterPosition列,得到两列数据 split_cols = playerData['RosterPosition'].str.split('/', 1, expand=True) # 把拆分后的列命名并添加到原DataFrame playerData['Primary Position'] = split_cols[0] playerData['Secondary Position'] = split_cols[1] # 如果你想删掉原来的RosterPosition列,可以加这行 # playerData.drop('RosterPosition', axis=1, inplace=True) print(playerData)
方案2:用join基于索引合并
如果你想保留拆分后的secondData作为单独的DataFrame,用join就很合适——它默认就是按行索引来合并的:
import pandas as pd filename = "DKSalaries.csv" playerData = pd.read_csv(filename) # 拆分并重命名列 secondData = playerData['RosterPosition'].str.split('/', 1, expand=True).rename( columns={0:'Primary Position', 1:'Secondary Position'} ) # 基于索引合并两个DataFrame newData = playerData.join(secondData) # 可选:删除原RosterPosition列 # newData.drop('RosterPosition', axis=1, inplace=True) print(newData)
额外小提示
- 如果有些球员只有单个位置(比如
RosterPosition是CF没有斜杠),那么Secondary Position列会自动填充为NaN,你可以根据需求替换成空字符串或者其他值:playerData['Secondary Position'] = playerData['Secondary Position'].fillna('') - 要是你非要用
merge的话,也可以强制基于索引合并,但完全没必要这么绕:newData = playerData.merge(secondData, how='left', left_index=True, right_index=True)
内容的提问来源于stack exchange,提问作者Shawn Schreier
相关产品推荐
相关产品推荐

