python-3.x - 从某一列开始移动单行中的值
问题描述
我有一个数据框,其中一行有问题。问题是缺少一个值(来自第 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 并不能解决问题。即使是这样,我也会从头开始移动整行。
有没有办法从特定列开始移动单行(或行)?
解决方案
如果您知道要更改的行以及列号,则可以代替移动值来覆盖该行。
所以想象一下:
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
推荐阅读
- ruby-on-rails - Rails在没有关联的列值上过滤记录
- html - 如何使用flexbox将一个div放在另一个div的末尾?
- python - 如何使用 keras 将张量提供给计算图中的预训练模型?
- javascript - 带有 Safari 12 的 WebRTC 中的 NotReadableError
- nlp - 如何处理 NLP 中的两种实体提取方法
- swift - Unowned 引用如何与 Swift 中的捕获变量一起使用
- mysql - 如何在 MySQL 中查询 BINARY 字段?
- hibernate - 我想禁用实体@OneToMany 中的获取
- javascript - 给定一个对象,我如何获得用于描述它的名称?
- javascript - 如何使我的 NuxtJS 过渡布局特定而不是全局?