首页 > 解决方案 > 从某一列开始移动单行中的值

问题描述

我有一个数据框,其中一行有问题。问题是缺少一个值(来自第 1 列),其余列(总共 12 列)中的所有值都向左移动了一位。第 12 列的值为 NaN。

示例:(我将简单地使用整数来表示我的问题)

行应该是:1、2、3、4、5、6、7、8、9、10、11、12

我有:1、3、4、5、6、7、8、9、10、11、12、NaN

第 1 列中的值是“缺失”。第 2-12 列的值都向左移动了一位,第 12 列是 NaN。

我想将这一行中的值向右移动一列,以便得到:1、NaN、3、4、5、6、7、8、9、10、11、12

然后我可以简单地将第 2 列中的 NaN 替换为正确的值。

我发现 shift(): https://www.geeksforgeeks.org/python-pandas-dataframe-shift/ (加上其他来源)

我试过这个:

playstore = playstore.iloc[10472].shift(1, axis=1)
playstore.iloc[14072:1] = 'Lifestyle'
print(playstore.tail(), '\n')

但我得到一个语法错误: ValueError: No axis named 1 for object type <class 'pandas.core.series.Series'>

删除 axis=1 并不能解决问题。即使是这样,我也会从头开始移动整行。

有没有办法从特定列开始移动单行(或行)?

标签: python-3.xpandas

解决方案


如果您知道要更改的行以及列号,则可以代替移动值来覆盖该行。

所以想象一下:

    A   B    C
0   1   j   1.0
1   2   k   NaN
2   3   l   3.0

我们知道错误的值是列B并且是行号1,所以我们更改了这一行:

NUM_ROW = 1  # The number of the row with has to be fixed
TOTAl_ROWS = df.shape[1] - 1 # Number of rows without counting the last one which is NaN.

new_line = [df.iloc[NUM_ROW, 0], None]  # Initialize the new_line with the right part of the row.

# Get the rest of the new row.
for i in df.iloc[NUM_ROW, 1:TOTAl_ROWS]:
    new_line.append(i)

# Overwriting old row with new one
df.loc[NUM_ROW] = new_line

所以你的输出是:

    A   B     C
0   1   j     1
1   2   None  k
2   3   l     3

推荐阅读