What is difference between DataFrame attribute and column [duplicate]












0















This question already has an answer here:




  • In pandas, what's the difference between df['column'] and df.column?

    1 answer




In [66]: data
Out[66]:
col1 col2 label
0 1.0 a c
1 2.0 b d
2 3.0 c e
3 0.0 d f
4 4.0 e 0
5 5.0 f 0

In [67]: data.label
Out[67]:
0 c
1 d
2 NaN
3 f
4 NaN
5 NaN
Name: col2, dtype: object

In [68]: data['label']
Out[68]:
0 c
1 d
2 e
3 f
4 0
5 0
Name: label, dtype: object


Why data.label and data['label'] showing different results?










share|improve this question













marked as duplicate by Mohamed Thasin ah, jpp dataframe
Users with the  dataframe badge can single-handedly close dataframe questions as duplicates and reopen them as needed.

StackExchange.ready(function() {
if (StackExchange.options.isMobile) return;

$('.dupe-hammer-message-hover:not(.hover-bound)').each(function() {
var $hover = $(this).addClass('hover-bound'),
$msg = $hover.siblings('.dupe-hammer-message');

$hover.hover(
function() {
$hover.showInfoMessage('', {
messageElement: $msg.clone().show(),
transient: false,
position: { my: 'bottom left', at: 'top center', offsetTop: -7 },
dismissable: false,
relativeToBody: true
});
},
function() {
StackExchange.helpers.removeMessages();
}
);
});
});
Nov 17 at 20:26


This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.




















    0















    This question already has an answer here:




    • In pandas, what's the difference between df['column'] and df.column?

      1 answer




    In [66]: data
    Out[66]:
    col1 col2 label
    0 1.0 a c
    1 2.0 b d
    2 3.0 c e
    3 0.0 d f
    4 4.0 e 0
    5 5.0 f 0

    In [67]: data.label
    Out[67]:
    0 c
    1 d
    2 NaN
    3 f
    4 NaN
    5 NaN
    Name: col2, dtype: object

    In [68]: data['label']
    Out[68]:
    0 c
    1 d
    2 e
    3 f
    4 0
    5 0
    Name: label, dtype: object


    Why data.label and data['label'] showing different results?










    share|improve this question













    marked as duplicate by Mohamed Thasin ah, jpp dataframe
    Users with the  dataframe badge can single-handedly close dataframe questions as duplicates and reopen them as needed.

    StackExchange.ready(function() {
    if (StackExchange.options.isMobile) return;

    $('.dupe-hammer-message-hover:not(.hover-bound)').each(function() {
    var $hover = $(this).addClass('hover-bound'),
    $msg = $hover.siblings('.dupe-hammer-message');

    $hover.hover(
    function() {
    $hover.showInfoMessage('', {
    messageElement: $msg.clone().show(),
    transient: false,
    position: { my: 'bottom left', at: 'top center', offsetTop: -7 },
    dismissable: false,
    relativeToBody: true
    });
    },
    function() {
    StackExchange.helpers.removeMessages();
    }
    );
    });
    });
    Nov 17 at 20:26


    This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.


















      0












      0








      0








      This question already has an answer here:




      • In pandas, what's the difference between df['column'] and df.column?

        1 answer




      In [66]: data
      Out[66]:
      col1 col2 label
      0 1.0 a c
      1 2.0 b d
      2 3.0 c e
      3 0.0 d f
      4 4.0 e 0
      5 5.0 f 0

      In [67]: data.label
      Out[67]:
      0 c
      1 d
      2 NaN
      3 f
      4 NaN
      5 NaN
      Name: col2, dtype: object

      In [68]: data['label']
      Out[68]:
      0 c
      1 d
      2 e
      3 f
      4 0
      5 0
      Name: label, dtype: object


      Why data.label and data['label'] showing different results?










      share|improve this question














      This question already has an answer here:




      • In pandas, what's the difference between df['column'] and df.column?

        1 answer




      In [66]: data
      Out[66]:
      col1 col2 label
      0 1.0 a c
      1 2.0 b d
      2 3.0 c e
      3 0.0 d f
      4 4.0 e 0
      5 5.0 f 0

      In [67]: data.label
      Out[67]:
      0 c
      1 d
      2 NaN
      3 f
      4 NaN
      5 NaN
      Name: col2, dtype: object

      In [68]: data['label']
      Out[68]:
      0 c
      1 d
      2 e
      3 f
      4 0
      5 0
      Name: label, dtype: object


      Why data.label and data['label'] showing different results?





      This question already has an answer here:




      • In pandas, what's the difference between df['column'] and df.column?

        1 answer








      python pandas dataframe






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 16 at 3:00









      Sanjay Chouhan

      1




      1




      marked as duplicate by Mohamed Thasin ah, jpp dataframe
      Users with the  dataframe badge can single-handedly close dataframe questions as duplicates and reopen them as needed.

      StackExchange.ready(function() {
      if (StackExchange.options.isMobile) return;

      $('.dupe-hammer-message-hover:not(.hover-bound)').each(function() {
      var $hover = $(this).addClass('hover-bound'),
      $msg = $hover.siblings('.dupe-hammer-message');

      $hover.hover(
      function() {
      $hover.showInfoMessage('', {
      messageElement: $msg.clone().show(),
      transient: false,
      position: { my: 'bottom left', at: 'top center', offsetTop: -7 },
      dismissable: false,
      relativeToBody: true
      });
      },
      function() {
      StackExchange.helpers.removeMessages();
      }
      );
      });
      });
      Nov 17 at 20:26


      This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.






      marked as duplicate by Mohamed Thasin ah, jpp dataframe
      Users with the  dataframe badge can single-handedly close dataframe questions as duplicates and reopen them as needed.

      StackExchange.ready(function() {
      if (StackExchange.options.isMobile) return;

      $('.dupe-hammer-message-hover:not(.hover-bound)').each(function() {
      var $hover = $(this).addClass('hover-bound'),
      $msg = $hover.siblings('.dupe-hammer-message');

      $hover.hover(
      function() {
      $hover.showInfoMessage('', {
      messageElement: $msg.clone().show(),
      transient: false,
      position: { my: 'bottom left', at: 'top center', offsetTop: -7 },
      dismissable: false,
      relativeToBody: true
      });
      },
      function() {
      StackExchange.helpers.removeMessages();
      }
      );
      });
      });
      Nov 17 at 20:26


      This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.


























          2 Answers
          2






          active

          oldest

          votes


















          0














          The difference between these two is related to assignment. with data.label you cannot assign the values to column.



          data.label is to access the attributes and data["label"] is to assign the values.



          Also if you have spaces in your column name, for example df['label name'], while using data.label name will through an error.



          For more information see this Answer link






          share|improve this answer





























            0














            The big difference I've noticed is assignment.



            import random
            import pandas as pd

            s = "SummerCrime|WinterCrime".split("|")
            j = {x: [random.choice(["ASB", "Violence", "Theft", "Public Order", "Drugs"]) for j in range(300)] for x in s}
            df = pd.DataFrame(j)
            df.FallCrime = [random.choice(["ASB", "Violence", "Theft", "Public Order", "Drugs"]) for j in range(300)]


            Gives: UserWarning: Pandas doesn't allow columns to be created via a new attribute name



            However, there are also docs associated with this: https://pandas.pydata.org/pandas-docs/stable/indexing.html#attribute-access



            Which has the following warnings which may be related to your problem:



            - You can use this access only if the index element is a valid Python
            identifier, e.g. s.1 is not allowed.
            - The attribute will not be available if it
            conflicts with an existing method name, e.g. s.min is not allowed.
            - Similarly, the attribute will not be available if it conflicts with
            any of the following list: index, major_axis, minor_axis, items. In
            any of these cases, standard indexing will still work, e.g. s['1'],
            s['min'], and s['index'] will access the corresponding element or
            column.


            They go on to say:



            You can use attribute access to modify an existing element of a Series or column of a
            DataFrame, but be careful; if you try to use attribute access to create a new column,
            it creates a new attribute rather than a new column.
            **In 0.21.0 and later, this will raise a UserWarning**


            (So it's possible you did this without realizing)






            share|improve this answer























            • You should blockquote quotes from an external source, e.g. official documentation. And probably put your answer on the marked duplicate instead of here.
              – jpp
              Nov 17 at 20:27




















            2 Answers
            2






            active

            oldest

            votes








            2 Answers
            2






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            0














            The difference between these two is related to assignment. with data.label you cannot assign the values to column.



            data.label is to access the attributes and data["label"] is to assign the values.



            Also if you have spaces in your column name, for example df['label name'], while using data.label name will through an error.



            For more information see this Answer link






            share|improve this answer


























              0














              The difference between these two is related to assignment. with data.label you cannot assign the values to column.



              data.label is to access the attributes and data["label"] is to assign the values.



              Also if you have spaces in your column name, for example df['label name'], while using data.label name will through an error.



              For more information see this Answer link






              share|improve this answer
























                0












                0








                0






                The difference between these two is related to assignment. with data.label you cannot assign the values to column.



                data.label is to access the attributes and data["label"] is to assign the values.



                Also if you have spaces in your column name, for example df['label name'], while using data.label name will through an error.



                For more information see this Answer link






                share|improve this answer












                The difference between these two is related to assignment. with data.label you cannot assign the values to column.



                data.label is to access the attributes and data["label"] is to assign the values.



                Also if you have spaces in your column name, for example df['label name'], while using data.label name will through an error.



                For more information see this Answer link







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 16 at 3:34









                Chandila07

                439212




                439212

























                    0














                    The big difference I've noticed is assignment.



                    import random
                    import pandas as pd

                    s = "SummerCrime|WinterCrime".split("|")
                    j = {x: [random.choice(["ASB", "Violence", "Theft", "Public Order", "Drugs"]) for j in range(300)] for x in s}
                    df = pd.DataFrame(j)
                    df.FallCrime = [random.choice(["ASB", "Violence", "Theft", "Public Order", "Drugs"]) for j in range(300)]


                    Gives: UserWarning: Pandas doesn't allow columns to be created via a new attribute name



                    However, there are also docs associated with this: https://pandas.pydata.org/pandas-docs/stable/indexing.html#attribute-access



                    Which has the following warnings which may be related to your problem:



                    - You can use this access only if the index element is a valid Python
                    identifier, e.g. s.1 is not allowed.
                    - The attribute will not be available if it
                    conflicts with an existing method name, e.g. s.min is not allowed.
                    - Similarly, the attribute will not be available if it conflicts with
                    any of the following list: index, major_axis, minor_axis, items. In
                    any of these cases, standard indexing will still work, e.g. s['1'],
                    s['min'], and s['index'] will access the corresponding element or
                    column.


                    They go on to say:



                    You can use attribute access to modify an existing element of a Series or column of a
                    DataFrame, but be careful; if you try to use attribute access to create a new column,
                    it creates a new attribute rather than a new column.
                    **In 0.21.0 and later, this will raise a UserWarning**


                    (So it's possible you did this without realizing)






                    share|improve this answer























                    • You should blockquote quotes from an external source, e.g. official documentation. And probably put your answer on the marked duplicate instead of here.
                      – jpp
                      Nov 17 at 20:27


















                    0














                    The big difference I've noticed is assignment.



                    import random
                    import pandas as pd

                    s = "SummerCrime|WinterCrime".split("|")
                    j = {x: [random.choice(["ASB", "Violence", "Theft", "Public Order", "Drugs"]) for j in range(300)] for x in s}
                    df = pd.DataFrame(j)
                    df.FallCrime = [random.choice(["ASB", "Violence", "Theft", "Public Order", "Drugs"]) for j in range(300)]


                    Gives: UserWarning: Pandas doesn't allow columns to be created via a new attribute name



                    However, there are also docs associated with this: https://pandas.pydata.org/pandas-docs/stable/indexing.html#attribute-access



                    Which has the following warnings which may be related to your problem:



                    - You can use this access only if the index element is a valid Python
                    identifier, e.g. s.1 is not allowed.
                    - The attribute will not be available if it
                    conflicts with an existing method name, e.g. s.min is not allowed.
                    - Similarly, the attribute will not be available if it conflicts with
                    any of the following list: index, major_axis, minor_axis, items. In
                    any of these cases, standard indexing will still work, e.g. s['1'],
                    s['min'], and s['index'] will access the corresponding element or
                    column.


                    They go on to say:



                    You can use attribute access to modify an existing element of a Series or column of a
                    DataFrame, but be careful; if you try to use attribute access to create a new column,
                    it creates a new attribute rather than a new column.
                    **In 0.21.0 and later, this will raise a UserWarning**


                    (So it's possible you did this without realizing)






                    share|improve this answer























                    • You should blockquote quotes from an external source, e.g. official documentation. And probably put your answer on the marked duplicate instead of here.
                      – jpp
                      Nov 17 at 20:27
















                    0












                    0








                    0






                    The big difference I've noticed is assignment.



                    import random
                    import pandas as pd

                    s = "SummerCrime|WinterCrime".split("|")
                    j = {x: [random.choice(["ASB", "Violence", "Theft", "Public Order", "Drugs"]) for j in range(300)] for x in s}
                    df = pd.DataFrame(j)
                    df.FallCrime = [random.choice(["ASB", "Violence", "Theft", "Public Order", "Drugs"]) for j in range(300)]


                    Gives: UserWarning: Pandas doesn't allow columns to be created via a new attribute name



                    However, there are also docs associated with this: https://pandas.pydata.org/pandas-docs/stable/indexing.html#attribute-access



                    Which has the following warnings which may be related to your problem:



                    - You can use this access only if the index element is a valid Python
                    identifier, e.g. s.1 is not allowed.
                    - The attribute will not be available if it
                    conflicts with an existing method name, e.g. s.min is not allowed.
                    - Similarly, the attribute will not be available if it conflicts with
                    any of the following list: index, major_axis, minor_axis, items. In
                    any of these cases, standard indexing will still work, e.g. s['1'],
                    s['min'], and s['index'] will access the corresponding element or
                    column.


                    They go on to say:



                    You can use attribute access to modify an existing element of a Series or column of a
                    DataFrame, but be careful; if you try to use attribute access to create a new column,
                    it creates a new attribute rather than a new column.
                    **In 0.21.0 and later, this will raise a UserWarning**


                    (So it's possible you did this without realizing)






                    share|improve this answer














                    The big difference I've noticed is assignment.



                    import random
                    import pandas as pd

                    s = "SummerCrime|WinterCrime".split("|")
                    j = {x: [random.choice(["ASB", "Violence", "Theft", "Public Order", "Drugs"]) for j in range(300)] for x in s}
                    df = pd.DataFrame(j)
                    df.FallCrime = [random.choice(["ASB", "Violence", "Theft", "Public Order", "Drugs"]) for j in range(300)]


                    Gives: UserWarning: Pandas doesn't allow columns to be created via a new attribute name



                    However, there are also docs associated with this: https://pandas.pydata.org/pandas-docs/stable/indexing.html#attribute-access



                    Which has the following warnings which may be related to your problem:



                    - You can use this access only if the index element is a valid Python
                    identifier, e.g. s.1 is not allowed.
                    - The attribute will not be available if it
                    conflicts with an existing method name, e.g. s.min is not allowed.
                    - Similarly, the attribute will not be available if it conflicts with
                    any of the following list: index, major_axis, minor_axis, items. In
                    any of these cases, standard indexing will still work, e.g. s['1'],
                    s['min'], and s['index'] will access the corresponding element or
                    column.


                    They go on to say:



                    You can use attribute access to modify an existing element of a Series or column of a
                    DataFrame, but be careful; if you try to use attribute access to create a new column,
                    it creates a new attribute rather than a new column.
                    **In 0.21.0 and later, this will raise a UserWarning**


                    (So it's possible you did this without realizing)







                    share|improve this answer














                    share|improve this answer



                    share|improve this answer








                    edited Nov 17 at 20:35

























                    answered Nov 16 at 3:13









                    Charles Landau

                    1,8771215




                    1,8771215












                    • You should blockquote quotes from an external source, e.g. official documentation. And probably put your answer on the marked duplicate instead of here.
                      – jpp
                      Nov 17 at 20:27




















                    • You should blockquote quotes from an external source, e.g. official documentation. And probably put your answer on the marked duplicate instead of here.
                      – jpp
                      Nov 17 at 20:27


















                    You should blockquote quotes from an external source, e.g. official documentation. And probably put your answer on the marked duplicate instead of here.
                    – jpp
                    Nov 17 at 20:27






                    You should blockquote quotes from an external source, e.g. official documentation. And probably put your answer on the marked duplicate instead of here.
                    – jpp
                    Nov 17 at 20:27





                    Popular posts from this blog

                    Biblatex bibliography style without URLs when DOI exists (in Overleaf with Zotero bibliography)

                    ComboBox Display Member on multiple fields

                    Is it possible to collect Nectar points via Trainline?