Pandas DataFrame创建出错求助:列值错位原因及解决方法
问题原因与解决办法
核心原因
你创建DataFrame时误用了**集合({})**而非有序数据结构。集合有两个关键特性导致了错位问题:
- 无序性:集合内部元素没有固定顺序,Pandas读取集合时的遍历顺序由元素哈希值决定。不同长度、内容的字符串哈希值不同,短州名碰巧哈希后顺序和列名匹配,长州名就会因为哈希顺序变化导致列值错位。
- 唯一性:你代码里重复的
{'Sam', 19, 'Tamil Naidu'}会被自动去重,最终DataFrame里只会保留一条该记录,这也是隐藏的问题。
解决办法
方法1:用有序列表替代集合
列表([])是有序结构,元素顺序和列名顺序严格对应,直接把大括号换成中括号即可:
import pandas as pd names = ['Name', 'Score', 'State'] df = pd.DataFrame([['Sam', 19, 'Tamil Naidu'], ['Kari', 10, 'Himachal Pradesh'], ['Sam', 19, 'Tamil Naidu'], ['Samual Dan', 11, 'Haryana']], columns = names)
方法2:用字典明确映射列与值(更严谨)
字典可以指定每个列对应的具体值,完全规避顺序问题,即使列名顺序调整也不会出错:
import pandas as pd df = pd.DataFrame([{'Name': 'Sam', 'Score': 19, 'State': 'Tamil Naidu'}, {'Name': 'Kari', 'Score': 10, 'State': 'Himachal Pradesh'}, {'Name': 'Sam', 'Score': 19, 'State': 'Tamil Naidu'}, {'Name': 'Samual Dan', 'Score': 11, 'State': 'Haryana'}])
(若需要固定列顺序,可额外指定columns=names参数)
内容的提问来源于stack exchange,提问作者Kartik
相关产品推荐
相关产品推荐

