【问题标题】:Create DataFrame from another DataFrame.describe() - Pandas从另一个 DataFrame.describe() 创建 DataFrame - Pandas
【发布时间】:2016-03-05 17:04:22
【问题描述】:

这是我的代码

import pandas as pd
df = pd.DataFrame({'Test': [861166021755746, 861166021755746, 861166021755746]})
df_2 = pd.DataFrame(df['Test'].describe(), columns = ['Test2'])

print(df.describe())
print(df_2.describe())

这是输出

Test
count  3.000000e+00
mean   8.611660e+14
std    0.000000e+00
min    8.611660e+14
25%    8.611660e+14
50%    8.611660e+14
75%    8.611660e+14
max    8.611660e+14
        Test2
count       0
unique      0

我不明白为什么dfdf_2 的输出不一样

【问题讨论】:

    标签: python pandas append


    【解决方案1】:

    问题在于您如何创建df_2。当您说columns=['Test2'] 时,您将丢弃df['Test'].describe() 名为Test2 的所有列。但是没有名为Test2 的列。所以你扔掉所有的列,导致一个空的数据框。

    如您所愿,请提供一个字典,其键为新列名Test2,其值为df['Test'].describe()

    df = pd.DataFrame({'Test': [861166021755746, 861166021755746, 861166021755746]})
    df_2 = pd.DataFrame({'Test2': df['Test'].describe()})
    

    这样:

    >>> print(df.describe())
    
                   Test
    count  3.000000e+00
    mean   8.611660e+14
    std    0.000000e+00
    min    8.611660e+14
    25%    8.611660e+14
    50%    8.611660e+14
    75%    8.611660e+14
    max    8.611660e+14
    
    >>> print(df_2)
    
                  Test2
    count  3.000000e+00
    mean   8.611660e+14
    std    0.000000e+00
    min    8.611660e+14
    25%    8.611660e+14
    50%    8.611660e+14
    75%    8.611660e+14
    max    8.611660e+14
    

    【讨论】:

      【解决方案2】:

      您需要添加tolist():

      import pandas as pd
      df = pd.DataFrame({'Test': [861166021755746, 861166021755746, 861166021755746]})
      df_2 = pd.DataFrame(df['Test'].describe().tolist(), columns = ['Test2'])
      
      print(df.describe())
      
                      Test
      count  3.000000e+00
      mean   8.611660e+14
      std    0.000000e+00
      min    8.611660e+14
      25%    8.611660e+14
      50%    8.611660e+14
      75%    8.611660e+14
      max    8.611660e+14
      
      print(df_2.describe())
      
                    Test2
      count  8.000000e+00
      mean   6.458745e+14
      std    3.986424e+14
      min    0.000000e+00
      25%    6.458745e+14
      50%    8.611660e+14
      75%    8.611660e+14
      max    8.611660e+14
      

      而且它是不同的,因为数据帧不同:

      print df
      print df_2
      
                    Test
      0  861166021755746
      1  861166021755746
      2  861166021755746
                Test2
      0  3.000000e+00
      1  8.611660e+14
      2  0.000000e+00
      3  8.611660e+14
      4  8.611660e+14
      5  8.611660e+14
      6  8.611660e+14
      7  8.611660e+14
      

      如果你不能使用tolist(),你会得到空的df_2

      import pandas as pd
      df = pd.DataFrame({'Test': [861166021755746, 861166021755746, 861166021755746]})
      df_2 = pd.DataFrame(df['Test'].describe(), columns = ['Test2'])
      
      
      print df
                    Test
      0  861166021755746
      1  861166021755746
      2  861166021755746
      
      print df_2
      
      Empty DataFrame
      Columns: [Test2]
      Index: []
      

      【讨论】:

      • 非常感谢!当然,它们是不同的。我的意思是我希望第二个不是空的。你知道我为什么需要tolist()。如果我使用series_test = pd.Series([1,2,3,4,5,6]) df_3 = pd.DataFrame(series_test, columns = ['Test3']),那么我会得到非空数据框
      猜你喜欢
      • 2019-07-08
      • 1970-01-01
      • 2013-07-19
      • 1970-01-01
      • 1970-01-01
      • 2015-12-05
      • 2021-11-26
      • 2021-05-02
      • 1970-01-01
      相关资源
      最近更新 更多