Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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_Numpy_Pandas - Fatal编程技术网

Python 使用熊猫旋转数据帧

Python 使用熊猫旋转数据帧,python,numpy,pandas,Python,Numpy,Pandas,我通过pandas.read_html Column0 Column1 Column2 Column3 0 Entry_1 0.685 Record_1 0.69-S$ 0.685 1 Entry_2 0.036 Record_2 0.685 2 Entry_3 05/Jul/2016 Record_3 0.72-S$ 0.4 3 Entry_4 0

我通过
pandas.read_html

      Column0    Column1      Column2      Column3
0     Entry_1    0.685        Record_1     0.69-S$ 0.685
1     Entry_2    0.036        Record_2     0.685
2     Entry_3    05/Jul/2016  Record_3     0.72-S$ 0.4
3     Entry_4    0.338        Record_4     178.8 mm
4     Entry_5    0.41         Record_5     0.06
5     Entry_6    122.48       Record_6     17.29%
6     Entry_7    0.5          Record_7     0.58 as of 05/Jul/2016

如何对该数据进行pviot/转换,使
列0
成为标题,
列1
成为值。类似地,对于
第2列
第3列

我建议您使用以下示例中的方法:

import pandas as pd
import numpy as np
import pandas.util.testing as tm; tm.N = 3
def unpivot(frame):
    N, K = frame.shape
    data = {'value' : frame.values.ravel('F'),
            'variable' : np.asarray(frame.columns).repeat(N),
            'date' : np.tile(np.asarray(frame.index), K)}
    return pd.DataFrame(data, columns=['date', 'variable', 'value'])
df = unpivot(tm.makeTimeDataFrame())
print (df)

print (df.pivot(index='date', columns='variable', values='value'))
打印(df)

日期变量值
0 2000-01-03 A 0.101495
1 2000-01-04 A-0.554863
2000-01-05A-0.345271
3200-01-03B-1.104909
4 2000-01-04 B-0.723819
52000-01-05B0.088401
6 2000-01-03 C 1.495768
7 2000-01-04 C-0.756166
8 2000-01-05 C-0.266072
9 2000-01-03 D 0.451050
102000-01-04D-1.457763
11 2000-01-05 D 0.945552

打印(df.pivot(index='date',columns='variable',values='value'))

变量A B C D
日期
2000-01-03 2.932572-1.959961 0.385705-1.629831
2000-01-04-0.317548 0.0310412.129526-1.717546
2000-01-05 0.108186 1.182527 0.997716 0.453127


我建议您使用以下示例中的方法:

import pandas as pd
import numpy as np
import pandas.util.testing as tm; tm.N = 3
def unpivot(frame):
    N, K = frame.shape
    data = {'value' : frame.values.ravel('F'),
            'variable' : np.asarray(frame.columns).repeat(N),
            'date' : np.tile(np.asarray(frame.index), K)}
    return pd.DataFrame(data, columns=['date', 'variable', 'value'])
df = unpivot(tm.makeTimeDataFrame())
print (df)

print (df.pivot(index='date', columns='variable', values='value'))
打印(df)

日期变量值
0 2000-01-03 A 0.101495
1 2000-01-04 A-0.554863
2000-01-05A-0.345271
3200-01-03B-1.104909
42000-01-04b-0.723819
52000-01-05B0.088401
6 2000-01-03 C 1.495768
7 2000-01-04 C-0.756166
8 2000-01-05 C-0.266072
9 2000-01-03 D 0.451050
102000-01-04D-1.457763
11 2000-01-05 D 0.945552

打印(df.pivot(index='date',columns='variable',values='value'))

变量A B C D
日期
2000-01-03 2.932572-1.959961 0.385705-1.629831
2000-01-04-0.317548 0.0310412.129526-1.717546
2000-01-05 0.108186 1.182527 0.997716 0.453127


您可以使用
lreshape
创建新列,然后从
Col
中,通过转置和最后删除列名(在
pandas
中新增
0.18.0
):


您可以使用
lreshape
创建新列,然后从
Col
中,通过转置和最后删除列名(在
pandas
中新增
0.18.0
):


这可能是解决这个问题最简单的方法。无论如何,这是我能想到的最简单的方法

Column0     Column1     Column2     Column3
0   Entry_1     0.685   Record_1    0.69-S$ 0.685
1   Entry_2     0.036   Record_2    0.685
2   Entry_3     05/Jul/2016     Record_3    0.72-S$ 0.4
3   Entry_4     0.338   Record_4    178.8 mm
4   Entry_5     0.41    Record_5    0.06
5   Entry_6     122.48  Record_6    17.29%
6   Entry_7     0.5     Record_7    0.58 as of 05/Jul/2016

cols = df['Column0'].append(df['Column2'])
vals = df['Column1'].append(df['Column3'])

newdf = pd.DataFrame(vals).T
newdf.columns = cols
newdf



 Entry_1    Entry_2     Entry_3     Entry_4     Entry_5     Entry_6     Entry_7     Record_1    Record_2    Record_3    Record_4    Record_5    Record_6    Record_7
0   0.685   0.036   05/Jul/2016     0.338   0.41    122.48  0.5     0.69-S$ 0.685   0.685   0.72-S$ 0.4     178.8 mm    0.06    17.29%  0.58 as of 05/Jul/2016

这可能是解决这个问题最简单的方法。无论如何,这是我能想到的最简单的方法

Column0     Column1     Column2     Column3
0   Entry_1     0.685   Record_1    0.69-S$ 0.685
1   Entry_2     0.036   Record_2    0.685
2   Entry_3     05/Jul/2016     Record_3    0.72-S$ 0.4
3   Entry_4     0.338   Record_4    178.8 mm
4   Entry_5     0.41    Record_5    0.06
5   Entry_6     122.48  Record_6    17.29%
6   Entry_7     0.5     Record_7    0.58 as of 05/Jul/2016

cols = df['Column0'].append(df['Column2'])
vals = df['Column1'].append(df['Column3'])

newdf = pd.DataFrame(vals).T
newdf.columns = cols
newdf



 Entry_1    Entry_2     Entry_3     Entry_4     Entry_5     Entry_6     Entry_7     Record_1    Record_2    Record_3    Record_4    Record_5    Record_6    Record_7
0   0.685   0.036   05/Jul/2016     0.338   0.41    122.48  0.5     0.69-S$ 0.685   0.685   0.72-S$ 0.4     178.8 mm    0.06    17.29%  0.58 as of 05/Jul/2016

这是两个数据帧?要合并它们,然后转置合并的数据帧吗?不。这是一个数据帧。这是我打印pandas.read_html输出时得到的代码。我想将
第0列
第2列
作为
第1列
第3列
中的值的标题,这是两个数据帧?要合并它们,然后转置合并的数据帧吗?不。这是一个数据帧。这是我打印pandas.read_html输出时得到的代码。我想将
第0列
第2列
作为
第1列
第3列
中的值的标题,那么我应该如何从上面发布的数据中写入它呢?对这个很陌生,那么我应该如何根据我上面发布的数据来写呢?这很新鲜谢谢耶斯雷尔!:)如果您愿意,您可以向上投票;-)谢谢。谢谢你,耶斯雷尔!:)如果您愿意,您可以向上投票;-)谢谢,谢谢乔。这有用:)谢谢乔。这是有效的:)