Нарезанный столбец информационного кадра Pandas содержит упоминание исходного имени столбца в новых объектах, созданных из столбца. - PullRequest
0 голосов
/ 07 октября 2018

Я вырезал из фрейма данных pandas для создания метки объекта.Имя столбца в исходном кадре данных было y.

Теперь, когда я беру сумму label и присваиваю ей m, во время печати она показывает y.Почему он это делает и что он хочет сказать, написав y 50.0?

>>> type(label)
<class 'pandas.core.frame.DataFrame'>
>>> label.head(2)
     y
0  1.0
1  1.0
>>> m = label.sum()
>>> m
y    50.0
dtype: float64
>>> 

Ответы [ 3 ]

0 голосов
/ 07 октября 2018

Возможно, вы ожидаете m как float.Нет, m - это Series.

>>> type(m) # to know type of `m`
pandas.core.series.Series

>>> m.dtype # to know type of data contained in `m`
dtype('float64')

Выполнение DataFrame.sum() обычно возвращает серию (или Dataframe в некоторых случаях).См. документы .

. Поэтому, когда вы печатаете m, вы не получаете только число 50.0, а вы получаете Серию m с y в качестве индексаи 50.0 в качестве значения.

0 голосов
/ 07 октября 2018

Использование label['y'].sum()

label - это объект pd.DataFrame, а pd.DataFrame.sum отличается от pd.Series.sum.«Суммирование кадра данных» без аргументов означает суммирование по всем индексам для каждого столбца .Для этого, если вы хотите быть явным, вы можете использовать axis=0, но это не обязательно:

sums_by_col = label.sum(axis=0)

Но то, что вы действительно хотите, это pd.Series.sum:

sum_of_series = label['y'].sum()
0 голосов
/ 07 октября 2018

Ваш label DataFrame содержит только 1 столбец с именем y с 50 строками 1.0, поэтому он возвращает sum of y.В вашем коде имя стало именем индекса (сумма одного столбца), так как для всего индекса в DataFrame необходимо имя, вы можете переименовать его, используя m.index = <insert a name or int here>, но m.index = None повысит TypeErrorисключение.

>>> import pandas as pd
>>> import numpy as np

>>> df = pd.DataFrame(np.ones(50), columns=['y'])
>>> df.head(2)
     y
0  1.0
1  1.0
>>> df
      y
0   1.0
1   1.0
2   1.0
3   1.0
4   1.0
... # reducted
48  1.0
49  1.0
>>> df.sum()
y    50.0
dtype: float64

>>> m = df.sum()
>>> m
y    50.0
dtype: float64
>>> m.index
Index(['y'], dtype='object')
>>> m.index = None
Traceback (most recent call last):
 ...
TypeError: Index(...) must be called with a collection of some kind, None was passed
...