从已有DataFrame创建新DataFrame时所有列为空的问题求助
解决新DataFrame列全为空的问题
嘿,我明白你现在的困扰——好不容易写了代码提取列,结果新DataFrame全是空的,太闹心了。咱们来揪出问题根源,快速搞定它!
问题出在哪?
你在创建pd.DataFrame()时,columns参数用了嵌套列表(也就是[['competition', ...]]这种双层括号的形式)。Pandas看到这种结构,会认为你要创建多层列索引,但你的字典里的键都是普通的单层列名,完全匹配不上,结果就是所有列都显示为空。
修正方案(两种可选)
方案1:去掉多余的columns参数
因为你传入的字典的键已经是你想要的列名了,Pandas会自动把这些键作为新DataFrame的列,不需要额外指定columns:
eventdata1 = pd.DataFrame({ "competition": eventdata['competition'], "hometeam": eventdata['hometeam_team1'], "awayteam": eventdata['awayteam_team2'], "team": eventdata['Team Against'], "MatchDateTime": eventdata['matchdatetime'], "EventDateTime": eventdata['eventdatetime'], "PreviousEventDateTime": eventdata['PreviousEventTime'], "Goal_Flag": eventdata['Goal_Flag'] })
方案2:用一维列表指定列顺序(如果需要)
如果你想明确指定列的排列顺序,把columns改成普通的一维列表(去掉外层括号)就行:
eventdata1 = pd.DataFrame({ "competition": eventdata['competition'], "hometeam": eventdata['hometeam_team1'], "awayteam": eventdata['awayteam_team2'], "team": eventdata['Team Against'], "MatchDateTime": eventdata['matchdatetime'], "EventDateTime": eventdata['eventdatetime'], "PreviousEventDateTime": eventdata['PreviousEventTime'], "Goal_Flag": eventdata['Goal_Flag'] }, columns=['competition', 'hometeam', 'awayteam', 'team', 'MatchDateTime', 'EventDateTime', 'PreviousEventDateTime', 'Goal_Flag'])
更简洁的替代写法
其实还有个更高效的方式:直接从原DataFrame重命名列后选取,避免重复写赋值逻辑:
# 先重命名需要修改的列,再选取目标列 eventdata1 = eventdata.rename(columns={ 'hometeam_team1': 'hometeam', 'awayteam_team2': 'awayteam', 'Team Against': 'team', 'matchdatetime': 'MatchDateTime', 'eventdatetime': 'EventDateTime', 'PreviousEventTime': 'PreviousEventDateTime' })[['competition', 'hometeam', 'awayteam', 'team', 'MatchDateTime', 'EventDateTime', 'PreviousEventDateTime', 'Goal_Flag']]
最后确认
别忘了检查原DataFrameeventdata的对应列是否真的有数据哦!可以跑一行代码验证:
# 查看原数据的目标列前几行 print(eventdata[['competition', 'hometeam_team1', 'awayteam_team2', 'Team Against', 'matchdatetime', 'eventdatetime', 'PreviousEventTime', 'Goal_Flag']].head())
如果原数据本身是空的,那得先去排查原数据的加载问题啦~
内容的提问来源于stack exchange,提问作者Zephyr
相关产品推荐
相关产品推荐

