从另一个DataFrame创建DataFrame.describe() - Pandas

3

以下是我的代码

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

我不明白为什么 df df_2 的输出结果不同。

2个回答

7
问题在于你创建df_2的方式。当你输入columns=['Test2']时,你丢弃了所有不叫做Test2的列,包括从df['Test'].describe()中获取的列。但是并没有叫做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']),那么我会得到一个非空数据框。 - user1700890

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接