从 pandas.dataframe.iloc 切片创建列表不起作用,而 pandas.dataframe.values 切片工作

Making lists from pandas.dataframe.iloc slice doesn't work while pandas.dataframe.values slice work

我想将数据框中的列聚合到新列中

所以我用了:

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

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

同时

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

将return等数据

[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2920000000.0, 2830000000.0, 3030000000.0, 0.0, 2980000000.0, 3000000000.0]。

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

通过阅读: pack dataframe columns to list in pandas

我通过使用 df.values 而不是 iloc 来绕过这个问题,但我仍然不明白使用 "whole slices" 有什么问题,只得到 headers。这很奇怪。谢谢

如果使用:

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

输出为DataFrame

如果:

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

输出是 Series - df 和列 1:4 中的第一个 row

样本:

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

然后你可以使用values如果需要输出为numpy array:

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

如果需要输出listslist,使用:

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]