Почему pd.Series вызывается дважды? - PullRequest
0 голосов
/ 29 апреля 2020

Я рассматривал некоторые решения для онлайн-кода для сортировки серии. В этом случае почему pd.Series вызывается дважды? Какой смысл, когда создается такая же серия?

import pandas как pd

s = pd.Series (['100', '200', 'python ',' 300.12 ',' 400 '])

print ("Серия исходных данных:")

new_s = pd.Series (s) .sort_values ​​()

print (new_s)

также, почему pd.apply (pd.Series) создает Dataframe? Спасибо !!

Ответы [ 4 ]

1 голос
/ 29 апреля 2020

Итак, во-первых, это новый Series избыточный конструктор:

s = pd.Series(['100', '200', 'python', '300.12', '400'])

new_s = s.sort_values()
print (new_s)
0       100
1       200
3    300.12
4       400
2    python
dtype: object

Причина, по которой создан один столбец DataFrame для каждого элемента обработки Series: Series.apply один элемент Series что соединено вместе. Итак, создается DataFrame:

print (s.apply(pd.Series))
        0
0     100
1     200
2  python
3  300.12
4     400

#working same like s.apply(pd.Series)
print (s.apply(lambda x: pd.Series(x)))
        0
0     100
1     200
2  python
3  300.12
4     400
0    100
dtype: object

#test output for each element
print (s.apply(lambda x: print(pd.Series(x))))
0    200
dtype: object
0    python
dtype: object
0    300.12
dtype: object
0    400
dtype: object

Но лучше использовать код для ряда с одним столбцом Dataframe: Series.to_frame:

print (s.to_frame())
        0
0     100
1     200
2  python
3  300.12
4     400
0 голосов
/ 29 апреля 2020
  1. Какой смысл, когда кажется, что он создает ту же серию?

Это не нужно, но я подозреваю, что оригинал источник пропустил два оператора печати из своего кода. Я считаю, что это должно быть:

import pandas as pd

s = pd.Series(['100', '200', 'python', '300.12', '400'])

print("Original Data Series:")
print(s)

new_s = s.sort_values()

print("Sorted Data Series:")
print(new_s)

Если целью является показать, как сортируются серии неоднородных типов данных.

почему pd.apply (pd.Series) создает Dataframe?

Если я предполагаю, что вы имели в виду для данной серии s и функция some_func, которая возвращает объект Series, тогда почему s.apply(some_func) возвращает DataFrame, тогда ответ заключается в том, что функция apply работает с каждым значением ряда, и если вы возвращаете ряд для каждого значения, которое у вас эффективно создал серию серий или датафрейм, как мне нравится думать об этом. Об этом говорится в документах здесь

Возвращает: Series или DataFrame

Если fun c возвращает объект Series, результатом будет DataFrame.

0 голосов
/ 29 апреля 2020

Это не обязательно. Следующий код должен работать нормально:

s = pd.Series(['100', '200', 'python', '300.12', '400'])
print(s.sort_values())



0 голосов
/ 29 апреля 2020

Я думаю, вы могли бы просто написать это так:

s = pd.Series (['100', '200', 'python', '300.12', '400'])

new_s = s.sort_values ​​()

print (new_s)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...