当NaN不连续两行重复时,用单词替换NaN值

时间:2017-06-25 15:27:32

标签: python pandas

以下数据框:

constructor(public authService: yourAuthService) { }

我需要将col_1,col_2,col_3中的NAN值替换为" F"当NAN没有在两个连续的行中重复时。输出是这样的:

index   Sent    col_1   col_2   col_3
    1   AB       NaN      DD     CC
    1             0       1       0
    2   SA        FA      FB      NaN
    2             1       1       NaN
    3   FF       Sha      NaN     PA
    3             1        0       1

但它将NAN值下的0替换为F.如何修复代码以将NAN替换为F.

1 个答案:

答案 0 :(得分:1)

可能有更好的方法,但有一种方法是尝试使用shift查看上面的row和下面的row。但是,对于第一行和最后一行,它会产生问题。因此,如果添加额外的行并在以后删除它不是问题,您可以尝试以下操作:

# Appending row to the top: https://stackoverflow.com/a/24284680/5916727
df.loc[-1] = [0 for n in range(len(df.columns))]
df.index = df.index + 1  # shifting index
df = df.sort_index()  # sorting by index

# Append row to below it
df.loc[df.shape[0]] = [0 for n in range(len(df.columns))]
print(df)

   index Sent col_1 col_2 col_3
0      0    0     0     0     0
1      1   AB   NaN    DD    CC
2      1          0     1     0
3      2   SA    FA    FB   NaN
4      2          1     1   NaN
5      3   FF   Sha   NaN    PA
6      3          1     0     1
7      0    0     0     0     0

现在,使用shiftmasking shift(-1)shift(1)使用columns = ["col_1", "col_2","col_3"] for column in columns: df.loc[df[column].isnull() & df[column].shift(-1).notnull() & df[column].shift(1).notnull(), column] = "F" df = df [1:-1] # remove extra rows print(df) 检查连续行:

   index Sent col_1 col_2 col_3
1      1   AB     F    DD    CC
2      1          0     1     0
3      2   SA    FA    FB   NaN
4      2          1     1   NaN
5      3   FF   Sha     F    PA
6      3          1     0     1

输出:

index

如果您愿意,也可以删除额外的csv列,这似乎有重复。

更新(添加测试的.csv数据)

我在测试index,Sent,col_1,col_2,col_3 1,AB,,DD,CC 1, ,0,1,0 2,SA,FA,FB,NA 2, ,1,1,NA 3,FF,Sha,,PA 3, ,1,0,1 文件中有以下内容。

dataframe

然后,您可以使用以下内容创建输入import pandas as pd df = pd.read_csv("FILENAME.csv")

interface Table<T> {
    // other functions omitted for simplicity
    save(data: object): Promise<T | T[]>;
    insert(data: object): Promise<T | T[]>;
    update(dataOrCriteria: object, changesMap?: object): Promise<T | T[]>;
  }