Pandas在数据帧中间移动列

2024-10-04 05:23:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧:

df = pd.DataFrame([[-1,2,2,3], [-1,3,4,5], [6,7,8,-1], [8,9,0,-1]])

        0   1   2   3

0       -1  2   2   3
1       -1  3   4   5
2       6   7   8   -1
3       8   9   0   -1

此数据集未对齐-1表示垃圾值。我尝试对齐列以获得以下结果:

        0   1   2   3

0       -1  2   2   3
1       -1  3   4   5
2       6   6   7   8
3       8   8   9   0

使用以下代码:

df.iloc[2:, 1:] = df.iloc[2:, :-1]

然后删除列0并完成,但是,这不起作用,而是生成:

        0     1     2     3

0       -1.0  2.0   2.0   3.0
1       -1.0  3.0   4.0   5.0
2       6.0   7.0   8.0   NaN
3       8.0   9.0   0.0   NaN

我可以把它分成两个框架,换一个,然后把它们重新缝合在一起,但我觉得对齐这些柱子应该是可能的

对齐列的最快方法是什么

我不关心int到float的转换

预期的最终结果:

        1   2   3

0       2   2   3
1       3   4   5
2       6   7   8
3       8   9   0

Tags: 数据方法代码框架dataframedfnanfloat
2条回答

您可以使用以下选项:

df.iloc[:,2:4] = df.iloc[:,2:4].replace(-1,float("nan")).ffill(axis = 1)
df = df.replace(-1,float("nan")).dropna(axis=1)
df

输出:

    1   2   3
0   2   2.0 3.0
1   3   4.0 5.0
2   7   8.0 8.0
3   9   0.0 0.0
df.iloc[2:, 1:] = df.iloc[2:, :-1].values

当您将数据帧分配给数据帧的一个片段时,它将按列的名称匹配列,有点像字典。列0将编辑列0等。。。不管作业左侧部分的位置如何。 请注意,您的列名是0、1、2等

当您调用.values时,左边的数据帧变成了一个没有列名的数字数组,所以您想要做的是,有点像一个数组

相关问题 更多 >