从 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]]
如果需要输出lists
的list
,使用:
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]
我想将数据框中的列聚合到新列中
所以我用了:
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]]
如果需要输出lists
的list
,使用:
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]