【问题标题】:pivot data from csv and store in dataframe从 csv 中透视数据并存储在数据框中
【发布时间】:2020-06-07 18:04:56
【问题描述】:

我有这样的要求:

我有一个包含以下数据的 csv 文件(这只是示例,数据要大得多):

xxxx|A|B|C|D|E
xxxx|P|Q|R|S|T
DATE|L|M|N|O|P
01/02/1997|12|4|5|0|0
01/03/1998|71|2|4|8|0

我想将数据保存在数据框中,这样列应该是:

 A   01/02/1997   P   L  12
 B   01/02/1997   Q   M   4
 C   01/02/1997   R   N   5
 D   01/02/1997   S   O   0
 E   01/02/1997   T   P   0
 A   01/03/1998   P   L  71
 B   01/03/1998   Q   M   2
 C   01/03/1998   R   N   4
 D   01/03/1998   S   O   8
 E   01/03/1998   T   P   0 

基本上第一列应该是旋转的。谁能帮忙?名称和数据只是示例(虚拟)

【问题讨论】:

  • pd.read_clipboard(header=[0,1,2], sep='|').set_index(['xxxx']).unstack().reset_index()
  • 做法是,知道哪一行是表头,哪一列是索引,设置好,然后unstack或者stack就看你需要了

标签: python pandas csv dataframe data-science


【解决方案1】:

首先通过header=[0,1,2]参数创建MultiIndex in columns,并通过read_csv中的index_col=[0]将第一列转换为索引:

df = pd.read_csv(filename, sep="|", header=[0,1,2], index_col=[0])
print (df)
xxxx         A  B  C  D  E
xxxx         P  Q  R  S  T
DATE         L  M  N  O  P
01/02/1997  12  4  5  0  0
01/03/1998  71  2  4  8  0

详情

print (df.columns)
MultiIndex([('A', 'P', 'L'),
            ('B', 'Q', 'M'),
            ('C', 'R', 'N'),
            ('D', 'S', 'O'),
            ('E', 'T', 'P')],
           names=['xxxx', 'xxxx', 'DATE'])

然后通过DataFrame.T转置,通过DataFrame.stack重塑,通过DataFrame.sort_index排序,通过DataFrame.rename_axis为MultiIndex创建标签,最后通过MultiIndex SeriesMultiIndex Series转换为DataFrameSeries.reset_index

df1 = (df.T
         .stack(dropna=False)
         .sort_index(level=3)
         .rename_axis(('a','b','c','d'))
         .reset_index(name='e'))
print (df1)
   a  b  c           d   e
0  A  P  L  01/02/1997  12
1  B  Q  M  01/02/1997   4
2  C  R  N  01/02/1997   5
3  D  S  O  01/02/1997   0
4  E  T  P  01/02/1997   0
5  A  P  L  01/03/1998  71
6  B  Q  M  01/03/1998   2
7  C  R  N  01/03/1998   4
8  D  S  O  01/03/1998   8
9  E  T  P  01/03/1998   0

【讨论】:

  • 事情是我只是举个例子,列号是未知的,就像目前在这个例子中我只提供了 5 列 abcde 但它们可以有更多不同的名称,所以不能真正形成一个多索引
  • @ayushgupta - 你认为关卡的数量是未知的吗?这里是样本数据中的 3 个级别A B C D EP Q R S TL M N O P
  • 不,级别数是固定的,即 3,如图所示。但列数不固定
  • @ayushgupta - 如果标头具有与数据相同的分隔符和相同的长度,则它可以正常工作。应该有更多的价值,仍然很好。
  • @ayushgupta - 好的,如果有错误或问题请告诉我。
猜你喜欢
  • 2020-09-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-18
  • 2020-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-29
相关资源
最近更新 更多