pandas 我在为机器学习模型准备数据框架时遇到问题

tyu7yeag  于 2023-11-15  发布在  其他
关注(0)|答案(1)|浏览(152)

当我用训练数据调用group by函数时,我保留了所有原始列,但是当我用我想要应用模型的数据调用它时,它会删除两列。每个绘制的查找编号有3次扫描,因此我试图按绘制的查找和Assemblage分组,并取所有三次扫描的平均值。这是代码:

SC = df1
groupSC = SC.groupby(["PlottedFind","Assemblage"], as_index=False).mean()
SC2 = df2
groupSC2 = SC2.groupby(["PlottedFind","Assemblage"], as_index=False).mean()

字符串
df1列名:['PlottedFind', 'Scan', 'Assemblage', 'L', 'A', 'B', 400, 410, 420, 430, 440, 450, 460, 470, 480, 490, 500, 510, 520, 530, 540, 550, 560, 570, 580, 590, 600, 610, 620, 630, 640, 650, 660, 670, 680, 690, 700]
df2列名:['PlottedFind', 'Scan', 'Assemblage', 'L', 'A', 'B', 400, 410, 420, 430, 440, 450, 460, 470, 480, 490, 500, 510, 520, 530, 540, 550, 560, 570, 580, 590, 600, 610, 620, 630, 640, 650, 660, 670, 680, 690, 700]
groupSC列名:['PlottedFind', 'Assemblage', 'L', 'A', 'B', 400, 410, 420, 430, 440, 450, 460, 470, 480, 490, 500, 510, 520, 530, 540, 550, 560, 570, 580, 590, 600, 610, 620, 630, 640, 650, 660, 670, 680, 690, 700]
groupSC2列名:

['PlottedFind', 'Assemblage', 'A', 'B', 410, 420, 430, 440, 450, 460, 470, 480, 490, 500, 510, 520, 530, 540, 550, 560, 570, 580, 590, 600, 610, 620, 630, 640, 650, 660, 670, 680, 690, 700]


我不明白为什么SC2组删除了L和400列。
任何帮助都是感激不尽的。

fnvucqvd

fnvucqvd1#

您可能在df2的列'L'和'400'中有非数值值。但是,根据Pandas的版本,行为会有所不同:
考虑这个框架:

df = pd.DataFrame({'PlottedFind': list('AABBCC'),
                   'Assemblage': list('XXYYZZ'),
                   'L': [0, 1, 2, 3, '4', 5],  # bad value
                   'A': [0, 1, 2, 3, 4, 5],
                   'B': [0, 1, 2, 3, 4, 5]})

个字符
在不同版本的Pandas上尝试groupby_mean

*Pandas1.4.4

>>> df.groupby(['PlottedFind', 'Assemblage'], as_index=False).mean()

  PlottedFind Assemblage    A    B
0           A          X  0.5  0.5
1           B          Y  2.5  2.5
2           C          Z  4.5  4.5

*Pandas1.5.3

>>> df.groupby(['PlottedFind', 'Assemblage'], as_index=False).mean()

FutureWarning: The default value of numeric_only in DataFrameGroupBy.mean is deprecated. In a future version, numeric_only will default to False. Either specify numeric_only or select only columns which should be valid for the function.

  PlottedFind Assemblage    A    B
0           A          X  0.5  0.5
1           B          Y  2.5  2.5
2           C          Z  4.5  4.5

*Pandas2.1.2

>>> df.groupby(['PlottedFind', 'Assemblage'], as_index=False).mean()

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
...
TypeError: agg function failed [how->mean,dtype->object]

相关问题