我有一个数据帧,其中有一行出现问题。问题是其中一个值(来自第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'>
删除轴=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