change nan values in pandas












-1














In my code the df.fillna() method is not working when the df.dropna() method is working. I don't want to drop the column though. What can I do that the fillna() method works?



def preprocess_df(df):
for col in df.columns: # go through all of the columns
if col != "target": # normalize all ... except for the target itself!
df[col] = df[col].pct_change() # pct change "normalizes" the different currencies (each crypto coin has vastly diff values, we're really more interested in the other coin's movements)
# df.dropna(inplace=True) # remove the nas created by pct_change
df.fillna(method="ffill", inplace=True)
print(df)
break
df[col] = preprocessing.scale(df[col].values) # scale between 0 and 1.









share|improve this question




















  • 4




    Please share a sample of your data.
    – MedAli
    Nov 23 at 9:05






  • 2




    If you dropna, the NAs are gone. Of course fillna will have nothing to fill...
    – iamanigeeit
    Nov 23 at 9:13








  • 1




    Your df.fillna(method="ffill", inplace=True) does not need to be within your loop since it is acting on df as a whole rather than just the column.
    – slackline
    Nov 23 at 9:23










  • @ user9468014 What you should do when someone answers your ques .
    – pygo
    Nov 23 at 19:20
















-1














In my code the df.fillna() method is not working when the df.dropna() method is working. I don't want to drop the column though. What can I do that the fillna() method works?



def preprocess_df(df):
for col in df.columns: # go through all of the columns
if col != "target": # normalize all ... except for the target itself!
df[col] = df[col].pct_change() # pct change "normalizes" the different currencies (each crypto coin has vastly diff values, we're really more interested in the other coin's movements)
# df.dropna(inplace=True) # remove the nas created by pct_change
df.fillna(method="ffill", inplace=True)
print(df)
break
df[col] = preprocessing.scale(df[col].values) # scale between 0 and 1.









share|improve this question




















  • 4




    Please share a sample of your data.
    – MedAli
    Nov 23 at 9:05






  • 2




    If you dropna, the NAs are gone. Of course fillna will have nothing to fill...
    – iamanigeeit
    Nov 23 at 9:13








  • 1




    Your df.fillna(method="ffill", inplace=True) does not need to be within your loop since it is acting on df as a whole rather than just the column.
    – slackline
    Nov 23 at 9:23










  • @ user9468014 What you should do when someone answers your ques .
    – pygo
    Nov 23 at 19:20














-1












-1








-1







In my code the df.fillna() method is not working when the df.dropna() method is working. I don't want to drop the column though. What can I do that the fillna() method works?



def preprocess_df(df):
for col in df.columns: # go through all of the columns
if col != "target": # normalize all ... except for the target itself!
df[col] = df[col].pct_change() # pct change "normalizes" the different currencies (each crypto coin has vastly diff values, we're really more interested in the other coin's movements)
# df.dropna(inplace=True) # remove the nas created by pct_change
df.fillna(method="ffill", inplace=True)
print(df)
break
df[col] = preprocessing.scale(df[col].values) # scale between 0 and 1.









share|improve this question















In my code the df.fillna() method is not working when the df.dropna() method is working. I don't want to drop the column though. What can I do that the fillna() method works?



def preprocess_df(df):
for col in df.columns: # go through all of the columns
if col != "target": # normalize all ... except for the target itself!
df[col] = df[col].pct_change() # pct change "normalizes" the different currencies (each crypto coin has vastly diff values, we're really more interested in the other coin's movements)
# df.dropna(inplace=True) # remove the nas created by pct_change
df.fillna(method="ffill", inplace=True)
print(df)
break
df[col] = preprocessing.scale(df[col].values) # scale between 0 and 1.






python pandas






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 23 at 9:04









MedAli

6,76873980




6,76873980










asked Nov 23 at 8:59









user9468014

388




388








  • 4




    Please share a sample of your data.
    – MedAli
    Nov 23 at 9:05






  • 2




    If you dropna, the NAs are gone. Of course fillna will have nothing to fill...
    – iamanigeeit
    Nov 23 at 9:13








  • 1




    Your df.fillna(method="ffill", inplace=True) does not need to be within your loop since it is acting on df as a whole rather than just the column.
    – slackline
    Nov 23 at 9:23










  • @ user9468014 What you should do when someone answers your ques .
    – pygo
    Nov 23 at 19:20














  • 4




    Please share a sample of your data.
    – MedAli
    Nov 23 at 9:05






  • 2




    If you dropna, the NAs are gone. Of course fillna will have nothing to fill...
    – iamanigeeit
    Nov 23 at 9:13








  • 1




    Your df.fillna(method="ffill", inplace=True) does not need to be within your loop since it is acting on df as a whole rather than just the column.
    – slackline
    Nov 23 at 9:23










  • @ user9468014 What you should do when someone answers your ques .
    – pygo
    Nov 23 at 19:20








4




4




Please share a sample of your data.
– MedAli
Nov 23 at 9:05




Please share a sample of your data.
– MedAli
Nov 23 at 9:05




2




2




If you dropna, the NAs are gone. Of course fillna will have nothing to fill...
– iamanigeeit
Nov 23 at 9:13






If you dropna, the NAs are gone. Of course fillna will have nothing to fill...
– iamanigeeit
Nov 23 at 9:13






1




1




Your df.fillna(method="ffill", inplace=True) does not need to be within your loop since it is acting on df as a whole rather than just the column.
– slackline
Nov 23 at 9:23




Your df.fillna(method="ffill", inplace=True) does not need to be within your loop since it is acting on df as a whole rather than just the column.
– slackline
Nov 23 at 9:23












@ user9468014 What you should do when someone answers your ques .
– pygo
Nov 23 at 19:20




@ user9468014 What you should do when someone answers your ques .
– pygo
Nov 23 at 19:20












2 Answers
2






active

oldest

votes


















1














it should work unless its not within loop as mentioned..



You should consider filling it before you construct a loop or during the DataFrame construction:



Example Below cleary shows it working :



>>> df
col1
0 one
1 NaN
2 two
3 NaN


Works as expected:



>>> df['col1'].fillna( method ='ffill')  # This is showing column specific to `col1`

0 one
1 one
2 two
3 two
Name: col1, dtype: object


Secondly, if you wish to change few selective columns then you use below method:



Let's suppose you have 3 columns and want to fillna with ffill for only 2 columns.



>>> df
col1 col2 col3
0 one test new
1 NaN NaN NaN
2 two rest NaN
3 NaN NaN NaN


Define the columns to be changed..



cols = ['col1', 'col2']

>>> df[cols] = df[cols].fillna(method ='ffill')
>>> df
col1 col2 col3
0 one test new
1 one test NaN
2 two rest NaN
3 two rest NaN


If you are considering it to be happen across entire DataFrame, the use it during as Follows:



>>> df
col1 col2
0 one test
1 NaN NaN
2 two rest
3 NaN NaN

>>> df.fillna(method ='ffill') # inplace=True if you considering as you wish for permanent change.
col1 col2
0 one test
1 one test
2 two rest
3 two rest





share|improve this answer































    0














    the first value was a NaN so I had to use bfill method instead. Thanks everyone






    share|improve this answer





















      Your Answer






      StackExchange.ifUsing("editor", function () {
      StackExchange.using("externalEditor", function () {
      StackExchange.using("snippets", function () {
      StackExchange.snippets.init();
      });
      });
      }, "code-snippets");

      StackExchange.ready(function() {
      var channelOptions = {
      tags: "".split(" "),
      id: "1"
      };
      initTagRenderer("".split(" "), "".split(" "), channelOptions);

      StackExchange.using("externalEditor", function() {
      // Have to fire editor after snippets, if snippets enabled
      if (StackExchange.settings.snippets.snippetsEnabled) {
      StackExchange.using("snippets", function() {
      createEditor();
      });
      }
      else {
      createEditor();
      }
      });

      function createEditor() {
      StackExchange.prepareEditor({
      heartbeatType: 'answer',
      autoActivateHeartbeat: false,
      convertImagesToLinks: true,
      noModals: true,
      showLowRepImageUploadWarning: true,
      reputationToPostImages: 10,
      bindNavPrevention: true,
      postfix: "",
      imageUploader: {
      brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
      contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
      allowUrls: true
      },
      onDemand: true,
      discardSelector: ".discard-answer"
      ,immediatelyShowMarkdownHelp:true
      });


      }
      });














      draft saved

      draft discarded


















      StackExchange.ready(
      function () {
      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53443440%2fchange-nan-values-in-pandas%23new-answer', 'question_page');
      }
      );

      Post as a guest















      Required, but never shown

























      2 Answers
      2






      active

      oldest

      votes








      2 Answers
      2






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes









      1














      it should work unless its not within loop as mentioned..



      You should consider filling it before you construct a loop or during the DataFrame construction:



      Example Below cleary shows it working :



      >>> df
      col1
      0 one
      1 NaN
      2 two
      3 NaN


      Works as expected:



      >>> df['col1'].fillna( method ='ffill')  # This is showing column specific to `col1`

      0 one
      1 one
      2 two
      3 two
      Name: col1, dtype: object


      Secondly, if you wish to change few selective columns then you use below method:



      Let's suppose you have 3 columns and want to fillna with ffill for only 2 columns.



      >>> df
      col1 col2 col3
      0 one test new
      1 NaN NaN NaN
      2 two rest NaN
      3 NaN NaN NaN


      Define the columns to be changed..



      cols = ['col1', 'col2']

      >>> df[cols] = df[cols].fillna(method ='ffill')
      >>> df
      col1 col2 col3
      0 one test new
      1 one test NaN
      2 two rest NaN
      3 two rest NaN


      If you are considering it to be happen across entire DataFrame, the use it during as Follows:



      >>> df
      col1 col2
      0 one test
      1 NaN NaN
      2 two rest
      3 NaN NaN

      >>> df.fillna(method ='ffill') # inplace=True if you considering as you wish for permanent change.
      col1 col2
      0 one test
      1 one test
      2 two rest
      3 two rest





      share|improve this answer




























        1














        it should work unless its not within loop as mentioned..



        You should consider filling it before you construct a loop or during the DataFrame construction:



        Example Below cleary shows it working :



        >>> df
        col1
        0 one
        1 NaN
        2 two
        3 NaN


        Works as expected:



        >>> df['col1'].fillna( method ='ffill')  # This is showing column specific to `col1`

        0 one
        1 one
        2 two
        3 two
        Name: col1, dtype: object


        Secondly, if you wish to change few selective columns then you use below method:



        Let's suppose you have 3 columns and want to fillna with ffill for only 2 columns.



        >>> df
        col1 col2 col3
        0 one test new
        1 NaN NaN NaN
        2 two rest NaN
        3 NaN NaN NaN


        Define the columns to be changed..



        cols = ['col1', 'col2']

        >>> df[cols] = df[cols].fillna(method ='ffill')
        >>> df
        col1 col2 col3
        0 one test new
        1 one test NaN
        2 two rest NaN
        3 two rest NaN


        If you are considering it to be happen across entire DataFrame, the use it during as Follows:



        >>> df
        col1 col2
        0 one test
        1 NaN NaN
        2 two rest
        3 NaN NaN

        >>> df.fillna(method ='ffill') # inplace=True if you considering as you wish for permanent change.
        col1 col2
        0 one test
        1 one test
        2 two rest
        3 two rest





        share|improve this answer


























          1












          1








          1






          it should work unless its not within loop as mentioned..



          You should consider filling it before you construct a loop or during the DataFrame construction:



          Example Below cleary shows it working :



          >>> df
          col1
          0 one
          1 NaN
          2 two
          3 NaN


          Works as expected:



          >>> df['col1'].fillna( method ='ffill')  # This is showing column specific to `col1`

          0 one
          1 one
          2 two
          3 two
          Name: col1, dtype: object


          Secondly, if you wish to change few selective columns then you use below method:



          Let's suppose you have 3 columns and want to fillna with ffill for only 2 columns.



          >>> df
          col1 col2 col3
          0 one test new
          1 NaN NaN NaN
          2 two rest NaN
          3 NaN NaN NaN


          Define the columns to be changed..



          cols = ['col1', 'col2']

          >>> df[cols] = df[cols].fillna(method ='ffill')
          >>> df
          col1 col2 col3
          0 one test new
          1 one test NaN
          2 two rest NaN
          3 two rest NaN


          If you are considering it to be happen across entire DataFrame, the use it during as Follows:



          >>> df
          col1 col2
          0 one test
          1 NaN NaN
          2 two rest
          3 NaN NaN

          >>> df.fillna(method ='ffill') # inplace=True if you considering as you wish for permanent change.
          col1 col2
          0 one test
          1 one test
          2 two rest
          3 two rest





          share|improve this answer














          it should work unless its not within loop as mentioned..



          You should consider filling it before you construct a loop or during the DataFrame construction:



          Example Below cleary shows it working :



          >>> df
          col1
          0 one
          1 NaN
          2 two
          3 NaN


          Works as expected:



          >>> df['col1'].fillna( method ='ffill')  # This is showing column specific to `col1`

          0 one
          1 one
          2 two
          3 two
          Name: col1, dtype: object


          Secondly, if you wish to change few selective columns then you use below method:



          Let's suppose you have 3 columns and want to fillna with ffill for only 2 columns.



          >>> df
          col1 col2 col3
          0 one test new
          1 NaN NaN NaN
          2 two rest NaN
          3 NaN NaN NaN


          Define the columns to be changed..



          cols = ['col1', 'col2']

          >>> df[cols] = df[cols].fillna(method ='ffill')
          >>> df
          col1 col2 col3
          0 one test new
          1 one test NaN
          2 two rest NaN
          3 two rest NaN


          If you are considering it to be happen across entire DataFrame, the use it during as Follows:



          >>> df
          col1 col2
          0 one test
          1 NaN NaN
          2 two rest
          3 NaN NaN

          >>> df.fillna(method ='ffill') # inplace=True if you considering as you wish for permanent change.
          col1 col2
          0 one test
          1 one test
          2 two rest
          3 two rest






          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Nov 23 at 9:54

























          answered Nov 23 at 9:28









          pygo

          1,9711617




          1,9711617

























              0














              the first value was a NaN so I had to use bfill method instead. Thanks everyone






              share|improve this answer


























                0














                the first value was a NaN so I had to use bfill method instead. Thanks everyone






                share|improve this answer
























                  0












                  0








                  0






                  the first value was a NaN so I had to use bfill method instead. Thanks everyone






                  share|improve this answer












                  the first value was a NaN so I had to use bfill method instead. Thanks everyone







                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered Nov 23 at 12:53









                  user9468014

                  388




                  388






























                      draft saved

                      draft discarded




















































                      Thanks for contributing an answer to Stack Overflow!


                      • Please be sure to answer the question. Provide details and share your research!

                      But avoid



                      • Asking for help, clarification, or responding to other answers.

                      • Making statements based on opinion; back them up with references or personal experience.


                      To learn more, see our tips on writing great answers.





                      Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                      Please pay close attention to the following guidance:


                      • Please be sure to answer the question. Provide details and share your research!

                      But avoid



                      • Asking for help, clarification, or responding to other answers.

                      • Making statements based on opinion; back them up with references or personal experience.


                      To learn more, see our tips on writing great answers.




                      draft saved


                      draft discarded














                      StackExchange.ready(
                      function () {
                      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53443440%2fchange-nan-values-in-pandas%23new-answer', 'question_page');
                      }
                      );

                      Post as a guest















                      Required, but never shown





















































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown

































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown







                      Popular posts from this blog

                      Contact image not getting when fetch all contact list from iPhone by CNContact

                      count number of partitions of a set with n elements into k subsets

                      A CLEAN and SIMPLE way to add appendices to Table of Contents and bookmarks