Pandas使用JSON配置的列名设置索引报错,如何解决?
Pandas使用JSON配置的列名设置索引报错,如何解决?
嗨,我来帮你理清这个问题的根源和解决办法~
你遇到的KeyError其实是个很典型的小坑:从JSON里读取到的unique_col_comb是单个字符串("COL1, COL2, COL3"),但Pandas的set_index()方法需要的是列名组成的列表。这就导致Pandas误以为你要找一个名叫COL1, COL2, COL3的列,而你的DataFrame里根本没有这个列,自然就报错了。
下面给你两个可行的解决办法,选哪个看你的实际场景:
办法一:在Python代码里把字符串转成列表
不需要修改JSON文件,只需要在读取配置后加一行字符串分割的代码就行。注意要处理掉列名前后的空格:
with open(r'unique_columns.json', 'r') as f: config = json.load(f) # 分割字符串并去除每个列名的空格 unique_col_comb = config['Unique_Column_Combination']['TABLE_NAME'].split(', ') df = pd.read_csv(f's3://path/to/file.csv', sep='|') df_unique = df.set_index(unique_col_comb).index.is_unique print(df_unique)
这样处理后,unique_col_comb就变成了['COL1', 'COL2', 'COL3'],和你手动写的格式完全一致,再传给set_index()就能正常运行了。
办法二:修改JSON文件为数组格式(如果允许的话)
如果你有权限修改JSON配置文件,直接把列名改成数组格式,这样读取后直接就是列表,代码不用额外处理:
{ "Unique_Column_Combination": { "TABLE_NAME": ["COL1", "COL2", "COL3"] } }
这种方式更直观,后续维护也更清晰,适合你能完全控制JSON文件的场景。
两种办法都能解决你的问题,根据自己的实际情况选就行~
备注:内容来源于stack exchange,提问作者Lilcodemuffin
相关产品推荐
相关产品推荐

