阅读csv文件后,如何处理多索引 Dataframe 中的未命名列?

x7rlezfr  于 2023-04-03  发布在  其他
关注(0)|答案(1)|浏览(96)

我的csv(multiindex columns)看起来像这样:

,,companyName
,,2014_counts
nationalClass,nationalClassTitle,
426,"Food or edible material: processes, compositions, and products",31
424,"Drug, bio-affecting and body treating compositions",25

我尝试使用以下代码以编程方式读取csv文件:

dfs=[]
csv_files = glob.glob(path + "/*.csv")
    
# read each csv file into a df
for file in csv_files:
    dfs.append(pd.read_csv(file, sep=',', header=[0,1,2], index_col=0))

我的输出是:
| 国家级|未命名:1_level_0未命名:1_level_1国家级职称|公司名称2014年_计数未命名:2_level_2|
| --------------|--------------|--------------|
| 四百二十六|食物或可食用材料:processes,compositio...|三十一|
| 四二四|药物、生物作用和身体治疗组合物|二十五|
我的desired输出为:
| 国家级|国家级职称|公司名称2014年_计数|
| --------------|--------------|--------------|
| 四百二十六|食物或可食用材料:processes,compositio...|三十一|
| 四二四|药物、生物作用和身体治疗组合物|二十五|
我不想创建新的MultiIndex并分配给列,如以下答案所示:Mark Empty values in Pandas DataFrame Multi-Row Header

taor4pac

taor4pac1#

从输出开始:

df = pd.read_csv("file.csv", sep=",", header=[0, 1, 2], index_col=0)
print(df)
# Output

                          Unnamed: 1_level_0        companyName
                          Unnamed: 1_level_1        2014_counts
nationalClass             nationalClassTitle Unnamed: 2_level_2
426            Food or edible material: p...                 31
424            Drug, bio-affecting and bo...                 25

下面是使用Pandas renameget_level_values执行此操作的一种方法:

# Save "nationalClass" for later
name = df.columns.names[2]

# Rename values in first and second levels
df = df.rename(columns=lambda x: "" if "Unnamed" in x else x, level=0)
df = df.rename(
    columns=lambda x: df.columns.get_level_values(2)[0] if "Unnamed" in x else x,
    level=1,
)

# Remove third level and add previously saved index name
df.columns = df.columns.droplevel(2)
df.columns.names = ("", name)

然后:

print(df)
# Output

                                             companyName
nationalClass             nationalClassTitle 2014_counts
426            Food or edible material: p...          31
424            Drug, bio-affecting and bo...          25

相关问题