Python Forum
Filling NaNs in a financial dataset
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Filling NaNs in a financial dataset
#6
Do you do something to create merged_df_nan i mean for me it dos not work if i just read sample.xlsx?
Ohh 500 columns is hell of DataFrame,not gone look for error in that.
import pandas as pd
from tqdm import tqdm

def average_col(merged_df_nan):
    #Filling NaN values for columns with less than 20k NaNs with the average of the period before and after
    na_counts = merged_df_nan.isna().sum()
    columns_to_fill2 = na_counts[(na_counts < 20000) & (~na_counts.index.isin(['Text', 'gvkey', 'datadate', 'prccq', 'naics', 'sic', 'processed_text', 'stemmed_text', 'sentiment_score', 'fyr', 'indfmt','consol','popsrc','tic','conm','apdedateq','fdateq','rdq']))].index

    #Iterate over the filtered columns and fill NA values with the average of previous and next non-NA values
    for column in tqdm(columns_to_fill2, desc = 'Columns done'):
        na_mask = merged_df_nan[column].isna()
        for index, row in merged_df_nan.iterrows():
            if na_mask[index]:
                fyearq = row['fyearq']
                fqtr = row['fqtr']
                cik = row['cik']

                #Looking for the values and taking the average of them
                prev_value = merged_df_nan.loc[(merged_df_nan['cik'] == cik) & ((merged_df_nan['fyearq'] < fyearq) | ((merged_df_nan['fyearq'] == fyearq) & (merged_df_nan['fqtr'] < fqtr)))].sort_values(['fyearq', 'fqtr'], ascending=[False, False]).head(1)[column].item()
                next_value = merged_df_nan.loc[(merged_df_nan['cik'] == cik) & ((merged_df_nan['fyearq'] > fyearq) | ((merged_df_nan['fyearq'] == fyearq) & (merged_df_nan['fqtr'] > fqtr)))].sort_values(['fyearq', 'fqtr'], ascending=[True, True]).head(1)[column].item()
                average_value = np.mean([prev_value, next_value])
                merged_df_nan.loc[index, column] = average_value
    return merged_df_nan

if __name__ == '__main__':
    merged_df_nan = pd.read_excel('sample.xlsx')
    res =  average_col(merged_df_nan)
Error:
Traceback (most recent call last): File "G:\div_code\hex\game\av.py", line 28, in <module> res = average_col(merged_df_nan) File "G:\div_code\hex\game\av.py", line 20, in average_col prev_value = merged_df_nan.loc[(merged_df_nan['cik'] == cik) & ((merged_df_nan['fyearq'] < fyearq) | ((merged_df_nan['fyearq'] == fyearq) & (merged_df_nan['fqtr'] < fqtr)))].sort_values(['fyearq', 'fqtr'], ascending=[False, False]).head(1)[column].item() File "C:\Python310\lib\site-packages\pandas\core\base.py", line 349, in item raise ValueError("can only convert an array of size 1 to a Python scalar") ValueError: can only convert an array of size 1 to a Python scalar
Reply


Messages In This Thread
Filling NaNs in a financial dataset - by larzz - Jun-01-2023, 09:40 PM
RE: Filling NaNs in a financial dataset - by larzz - Jun-03-2023, 10:51 AM
RE: Filling NaNs in a financial dataset - by larzz - Jun-04-2023, 07:56 AM
RE: Filling NaNs in a financial dataset - by snippsat - Jun-04-2023, 03:56 PM
RE: Filling NaNs in a financial dataset - by larzz - Jun-04-2023, 06:11 PM
RE: Filling NaNs in a financial dataset - by larzz - Jun-05-2023, 12:09 PM
RE: Filling NaNs in a financial dataset - by larzz - Jun-06-2023, 08:31 PM

Possibly Related Threads…
Thread Author Replies Views Last Post
  how to extract financial data from photocopy of document angela1 6 3,913 Feb-15-2020, 05:50 PM
Last Post: jim2007
  Financial Modeling MarkHaversham 2 4,880 Feb-11-2020, 10:55 AM
Last Post: Mikhail_Shi
  Google Financial Client ian 7 6,540 Sep-21-2017, 07:23 PM
Last Post: Larz60+
  Filling in missing values melm0 4 5,427 Aug-09-2017, 03:59 PM
Last Post: radioactive9

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020