Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的数据转置_Python_Pandas_Numpy - Fatal编程技术网

Python中的数据转置

Python中的数据转置,python,pandas,numpy,Python,Pandas,Numpy,我想使用python::原样将数据转置到一张表中,如下所示 将来 当我尝试使用下面的代码时,它给出了如下输出 import numpy as np import pandas as pd import openpyxl dfs = pd.read_excel('test.xlsx', sheet_name=None,header=None) tester=dfs['data'].values.tolist() keys = list(zip(*tester))[0] seen = set()

我想使用python::原样将数据转置到一张表中,如下所示

将来

当我尝试使用下面的代码时,它给出了如下输出

import numpy as np
import pandas as pd
import openpyxl
dfs = pd.read_excel('test.xlsx', sheet_name=None,header=None)
tester=dfs['data'].values.tolist()
keys = list(zip(*tester))[0]
seen = set()
seen_add = seen.add
keysu= [x for x in keys if not (x in seen or seen_add(x))]
values = list(zip(*tester))[1]
a = np.array(values).reshape(int(len(values)/len(keysu)),len(keysu))
list1=[keysu]
for i in a:
 list1.append(list(i))
 df=pd.DataFrame(list1)
 df.to_excel('test1.xlsx',index=False,header=False)

实际上,你需要做的是
透视
,而不是
转置

试试:
df.pivot(index='Hierarchy',columns='Fiscal'u Mo',values='Amount')。fillna('')

对于不存在的值,需要使用最后的
fillna(“”)
替换
NaN
Fiscal\u Mo
层次结构的组合,例如
201802
/
A

完整代码:

import pandas as pd

df = pd.DataFrame( {'Fiscal_Mo': ['201801', '201802', '201803', '201801'],
    'Hierarchy': ['A', 'B', 'C', 'B'], 'Amount': [ 100, 20, 300, 400 ] } )
df.pivot(index='Hierarchy', columns='Fiscal_Mo',values='Amount').fillna('')
关于您的评论的备注:它包含用 小写
h
。也许这就是你问题的根源

编辑 可能
层次结构
是数据帧的索引

在这种情况下,
pivot
表的索引将仅从 源数据帧的索引,因此应省略
index
参数

创建数据帧的相应代码为:

import pandas as pd

ind = pd.Index(data=['A', 'B', 'C', 'B'], name='Hierarchy')
df = pd.DataFrame( data={'Fiscal_Mo': ['201801', '201802', '201803', '201801'],
    'Amount': [ 100, 20, 300, 400 ] }, index=ind)
创建透视表的命令是:

df.pivot(columns='Fiscal_Mo', values='Amount').fillna('')
编辑2 关于
标题=无的调查

第一次尝试:我执行了:

df = pd.read_excel('Report.xlsx', sheet_name='Report', header=None)
df = pd.read_excel('Report.xlsx', sheet_name='Report')
并打印了
df
,结果是:

           0          1       2
0  Fiscal_Mo  Hierarchy  Amount
1     201801          A     100
2     201802          B      20
3     201803          C     300
4     201801          B     400
   Fiscal_Mo Hierarchy  Amount
0     201801         A     100
1     201802         B      20
2     201803         C     300
3     201801         B     400
如你所见:

  • 数据框中的列名是连续数字(错误)
  • 源文件中的列名(财务报表、层次结构、金额) 是第一行的值(错误)
  • 这里,任何调用任何函数并传递“文本”的尝试 列名将失败

    第二次尝试:我执行:

    df = pd.read_excel('Report.xlsx', sheet_name='Report', header=None)
    
    df = pd.read_excel('Report.xlsx', sheet_name='Report')
    
    请注意,这次没有
    标题
    参数,因此函数 假设
    标题=0
    -从第0行读取列名(首字母)

    当我打印
    df
    时,结果是:

               0          1       2
    0  Fiscal_Mo  Hierarchy  Amount
    1     201801          A     100
    2     201802          B      20
    3     201803          C     300
    4     201801          B     400
    
       Fiscal_Mo Hierarchy  Amount
    0     201801         A     100
    1     201802         B      20
    2     201803         C     300
    3     201801         B     400
    
    如你所见:

  • 数据帧中的列名取自第0行(确定)
  • 数据行取自“其他”行(确定)
  • 现在您可以拨打电话,例如:

    df.pivot(index='Hierarchy', columns='Fiscal_Mo', values='Amount').fillna('')
    
    没有任何错误

    请注意:

  • 参数值必须与相应的列名完全匹配 (小写/大写字母)
  • 我调用了
    df.pivot(…)
    not
    pd.pivot(df…)
    。显然你失败了 仔细阅读我的说明并将所有参数复制到代码中
  • 结论:从
    read_excel
    调用中删除
    header=None

    程序应该可以运行。

    谢谢Valdi的回答,但我在尝试使用代码返回self时遇到了以下错误。_engine.get_loc(self._可能是_cast_indexer(key))文件pandas中的第140行pandas\libs\index.pyx。_libs.index.IndexEngine.get_loc文件pandas\libs\index.pyx,第164行,在pandas._libs.index.IndexEngine.get_loc KeyError:“hierarchy”我也尝试使用小写字母“h”,我尝试读取excel文件,并尝试使用--df=pd.read_excel('Report_test1_111818_15_32_27.xlsx',sheet_name=“test header=None)透视表中的数据d=pd.pivot_table(df,index=[“hierarchy”])注意,在示例代码中,我编写了index='hierarchy'(不带方括号),还有columns='Fiscal_No'。显然第一行只包含列名。为什么要写header=None?在这种情况下,第一行(列名)实际上是第一个数据行,列名是连续的数字。我想,这不是你想要的。要查看此详细信息,请在代码中添加打印(df)。谢谢Valdi。。场景2运行得很好。。但我对如何在as列和values列保持不变的情况下动态更改索引有疑问