Python读取CSV后如何拆分合并为单字符串的列名?
解决CSV列名被合并成单个字符串的问题
嘿,我一眼就看出问题出在哪了——你指定的分隔符和文件实际用的不匹配!
问题根源
你代码里用了sep='|',但从输出的列名字符串'RECORD_ID,MDM_ID,SERIES_ID,...'能明显看出来,文件里的列名是用逗号分隔的。这就导致pandas把整个第一行(列名行)当成了单独一列的名称,自然找不到SERIES_ID这个列,所以才会报KeyError。
最简单的解决方案
直接把分隔符改成逗号就行,甚至可以省略sep参数(因为pandas默认的分隔符就是逗号):
import pandas as pd # 修正分隔符为逗号 df1 = pd.read_csv("D:/Users/SPate233/Downloads/iMedical/AMPIL_DEV/MDM_PRODUCT_VIEW/MDM_PRODUCT_VIEW_H.csv", sep=',') # 或者直接用默认参数,效果一样 # df1 = pd.read_csv("D:/Users/SPate233/Downloads/iMedical/AMPIL_DEV/MDM_PRODUCT_VIEW/MDM_PRODUCT_VIEW_H.csv") print(list(df1.columns)) print(df1['SERIES_ID'][2])
运行这段代码后,列名就会被拆分成你期望的独立列表,也能正常访问SERIES_ID列了。
极端情况的应对(万一数据和列名分隔符不一样)
如果遇到奇葩情况:列名用逗号分隔,但数据行用|分隔(这种情况很少见),可以手动拆分列名再加载数据:
import pandas as pd # 先读取所有内容,不指定列名 df_temp = pd.read_csv("D:/Users/SPate233/Downloads/iMedical/AMPIL_DEV/MDM_PRODUCT_VIEW/MDM_PRODUCT_VIEW_H.csv", sep='|', header=None) # 拆分第一行的字符串得到列名列表 column_names = df_temp.iloc[0, 0].split(',') # 跳过第一行,用拆分后的列名加载数据 df1 = pd.read_csv("D:/Users/SPate233/Downloads/iMedical/AMPIL_DEV/MDM_PRODUCT_VIEW/MDM_PRODUCT_VIEW_H.csv", sep='|', skiprows=1, names=column_names) print(list(df1.columns)) print(df1['SERIES_ID'][2])
内容的提问来源于stack exchange,提问作者jay
相关产品推荐
相关产品推荐

