在pandas.dataframe.values切片工作时,从pandas.dataframe.iloc切片制作列表不起作用

时间:2016-06-29 12:25:29

标签: python pandas slice

我想将数据框中的列格式化为新列

所以我用过:

newdataframe["agregate1"]=list(df.iloc[:,0:4])

但它不起作用。 它返回一个[" intensity_x"]列表(以x作为列索引),这些字符串是我的数据帧列的名称。

虽然

newdataframe["agregate1"]=list(df.iloc[0,0:4])

将返回

等数据

[0.0,0.0,0.0,0.0,0.0,0.0,29200000000.0,2830000000.0,30300000000.0,0.0,2980000000.0,3000000000.0]。

实际上这很重要,因为我无法正确检索我的数据,这似乎是一个错误,或者我错过了一些重要的内容。

阅读: pack dataframe columns to list in pandas

我通过使用df.values而不是iloc来规避问题,但我仍然不明白使用"整个切片"有什么问题,而只是改为使用标题。这很奇怪。感谢

1 个答案:

答案 0 :(得分:1)

如果使用:

df1 = df.iloc[:,0:4]

输出为DataFrame

如果:

df2 = df.iloc[0,0:4]

输出为Series - row中的df1:4列中的df = pd.DataFrame({'A':[1,2,3], 'B':[4,5,6], 'C':[7,8,9], 'D':[1,3,5], 'E':[5,3,6], 'F':[7,4,3]}) print (df) A B C D E F 0 1 4 7 1 5 7 1 2 5 8 3 3 4 2 3 6 9 5 6 3 df1 = df.iloc[:,0:4] print (df1) A B C D 0 1 4 7 1 1 2 5 8 3 2 3 6 9 5 df2 = df.iloc[0,0:4] print (df2) A 1 B 4 C 7 D 1 Name: 0, dtype: int64

样品:

numpy array

然后,如果需要输出print (df1.values) [[1 4 7 1] [2 5 8 3] [3 6 9 5]] ,则可以使用values

list

如果需要输出lists的{​​{1}},请使用:

print (df1.values.tolist())
[[1, 4, 7, 1], [2, 5, 8, 3], [3, 6, 9, 5]]

如果需要新列中的列表:

df['new'] = df.iloc[:,0:4].values.tolist()
print (df)
   A  B  C  D  E  F           new
0  1  4  7  1  5  7  [1, 4, 7, 1]
1  2  5  8  3  3  4  [2, 5, 8, 3]
2  3  6  9  5  6  3  [3, 6, 9, 5]

df['new'] = list(df.iloc[:,0:4].values)
print (df)
   A  B  C  D  E  F           new
0  1  4  7  1  5  7  [1, 4, 7, 1]
1  2  5  8  3  3  4  [2, 5, 8, 3]
2  3  6  9  5  6  3  [3, 6, 9, 5]