加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 当不重复生成列标题时,如何将csv文件作为MultiIndexed

发布时间:2020-12-20 13:09:42 所属栏目:Python 来源:网络整理
导读:我有许多.csv文件,我想读作MultiIndexed DataFrames,但是不会重复生成列标题,因此我留下了两个标题而不是MultiIndex. 一个test.csv文件: A,B,C,a1,a2,b1,b2,c1,c21,1,12,2,2 当我运行以下, import pandas as pddf = pd.read_csv('test.csv',header=[0,1])pr
我有许多.csv文件,我想读作MultiIndexed DataFrames,但是不会重复生成列标题,因此我留下了两个标题而不是MultiIndex.

一个test.csv文件:

A,B,C,a1,a2,b1,b2,c1,c2
1,1,1
2,2,2

当我运行以下,

import pandas as pd

df = pd.read_csv('test.csv',header=[0,1])
print(df)

返回的结构不是我想要的:

A Unnamed: 1_level_0  B Unnamed: 3_level_0  C Unnamed: 5_level_0
  a1                 a2 b1                 b2 c1                 c2
0  1                  1  1                  1  1                  1
1  2                  2  2                  2  2                  2

我想要一个MultiIndex,第一个列标题的行为如下:

A     B     C 
  a1 a2 b1 b2 c1 c2
0  1  1  1  1  1  1
1  2  2  2  2  2  2

有没有办法按原样读取csv,以便获得所需的结构?如果没有,最简单的方法是修改csv文件,以便它们明确重复外部标题值,这样做是否最有效?

A,A,C
a1,2

解决方法

我不知道有任何方法可以在单行中执行此操作,但您可以在python中修复它,而不是手动编辑文件.

首先从MultiIndex的第一级创建一个Series,确保按照标签中给出的顺序对值进行排序:

level_0 = pd.Series(df.columns.levels[0][df.columns.labels[0]])

然后将’Unnamed:*’值转换为None并执行fillna转发:

level_0[level_0.str.startswith('Unnamed: ')] = None
level_0 = level_0.fillna(method = 'ffill')

最后将系列值和索引指定为DataFrame的级别和标签:

df.columns = pd.MultiIndex(levels = [level_0.values,df.columns.levels[1]],labels = [level_0.index,df.columns.labels[1]])

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读