Python DataFrame:如果我更改索引,为什么我的值会更改为NaN?

时间:2016-08-12 06:26:25

标签: python pandas dataframe multiple-columns nan

我想改变我的指数。我的dataFrame如下:

partA = pd.DataFrame({'u1': 2, 'u2': 3, 'u3':4, 'u4':29, 'u5':4, 'u6':1, 'u7':323, 'u8':9, 'u9':7, 'u10':5}, index = [20])

给出一个大小为(1,10)的数据帧,所有单元格都已填满。

但是,当我创建一个新的数据帧(我原始代码中包含不同数据时需要)并且我更改了此dataFrame的索引时,我的单元格的值都等于NaN

我知道我可以使用reset_index来更改索引,但我希望能够在一行中完成所有操作。

我现在做的是以下(导致NaNs)

partB = pd.DataFrame(partA, columns = ['A', 'B', 'C', 'D','E', 'F', 'G', 'H', 'I','J'])

1 个答案:

答案 0 :(得分:2)

您需要values才能将partA转换为numpy array

partA = pd.DataFrame({'u1': 2, 'u2': 3, 'u3':4, 'u4':29, 'u5':4, 'u6':1, 
                      'u7':323, 'u8':9, 'u9':7, 'u10':5}, index = [20])
print (partA)
    u1  u10  u2  u3  u4  u5  u6   u7  u8  u9
20   2    5   3   4  29   4   1  323   9   7

partB = pd.DataFrame(partA.values,columns = ['A', 'B', 'C', 'D','E', 'F', 'G', 'H', 'I','J'])
print (partB)
   A  B  C  D   E  F  G    H  I  J
0  2  5  3  4  29  4  1  323  9  7

如果需要来自partA的索引:

partB = pd.DataFrame(partA.values,
                     columns = ['A', 'B', 'C', 'D','E', 'F', 'G', 'H', 'I','J'],
                     index = partA.index)
print (partB)
    A  B  C  D   E  F  G    H  I  J
20  2  5  3  4  29  4  1  323  9  7

您获得NaN因为未对齐列名称,因此如果更改了姓氏(u7),您将获得价值:

partB = pd.DataFrame(partA,
                     columns = ['A', 'B', 'C', 'D','E', 'F', 'G', 'H', 'I','u7'],
                     index = partA.index)
print (partB)
     A   B   C   D   E   F   G   H   I   u7
20 NaN NaN NaN NaN NaN NaN NaN NaN NaN  323