Home > front end >  Adding rows with value '0' in txt file to make total no. of rows divisible by 3
Adding rows with value '0' in txt file to make total no. of rows divisible by 3

Time:11-16

I'm trying to add new rows with value '0' in my txt file to make total no of rows divisible by 3, here is the code:

import pandas as pd

# read text file into pandas DataFrame
def process():
    df = pd.read_csv("./calibration.txt", sep=' ', header=None)
    if len(df)%3!=0:
        print("add zero in the last")
        number = 0
        with open('./calibration.txt', 'a') as f:
            f.write('\n%d' % number )
            f.close()
    #else:
     #   print("dont add zero")
if __name__=='__main__':
    process()
    df = pd.read_csv("./calibration.txt", sep=" ", header=None)
    df_new = pd.DataFrame(df.iloc[: , 0].values.reshape((-1, 3)))
    pd.set_option("display.max_rows", None, "display.max_columns", None)
    df_new.to_csv( index=False)
    print(df_new)

Now the problem is its writing only one new row with value '0' but I need to keep writing new rows with value '0' until total no. of rows get divisible by 3. Any help will be highly appreciable as I'm new to play with rows and columns. TIA

CodePudding user response:

Try something like

import numpy as np
import pandas as pd

# extracted as config var; allows for changing dataframe width in one location
WIDTH = 3

def process(path):
    df = pd.read_csv(path, sep=' ', header=None)
    vals = df.iloc[:,0].values
    remainder = len(vals) % WIDTH
    
    # pad with nothing on the left, WIDTH - remainder `0`s on the right
    padded = np.pad(vals, (0, WIDTH - remainder))
    return pd.DataFrame(padded.reshape((-1, WIDTH)))

if __name__=="__main__":
    df = process("./calibration.txt")
    pd.set_option("display.max_rows", None, "display.max_columns", None)
    print(df)
    df.to_csv(index=False)
  • Related