Панды применяют изменение dtype - PullRequest
0 голосов
/ 29 августа 2018

Я пытаюсь преобразовать массив данных pandas в серию кортежей:

Пример ввода:

df = pd.DataFrame([[1,2,3.0],[3,4,5.0]])

Желаемый вывод:

0    (1, 2, 3.0)
1    (3, 4, 5.0)
dtype: object    

Однако панды, кажется, заставляют мои целочисленные столбцы плавать.

Я пытался

import pandas as pd

df = pd.DataFrame([[1,2,3.0],[3,4,5]])
print(df)
print(df.dtypes)
print(df.apply(tuple,axis=1,reduce=False).apply(str))

Фактическая выработка:

   0  1    2
0  1  2  3.0
1  3  4  5.0

0      int64
1      int64
2    float64
dtype: object

0    (1.0, 2.0, 3.0)
1    (3.0, 4.0, 5.0)
dtype: object

Этот вопрос предлагает использовать reduce=False, но это ничего не меняет для меня.

Может ли кто-нибудь объяснить, почему панды принуждают тип данных где-то по пути?

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Добавление Python2.7-совместимого решения:

In [3]: pd.Series(tuple(i) for i in df.itertuples())
Out[4]:
0    (0, 1, 2, 3.0)
1    (1, 3, 4, 5.0)
dtype: object
0 голосов
/ 29 августа 2018

pandas.DataFrame.itertuples

, чтобы не заставлять ваши целые числа плавать

pd.Series([*df.itertuples(index=False)])

0    (1, 2, 3.0)
1    (3, 4, 5.0)
dtype: object

zip, map, восклицательный знак ... магия

pd.Series([*zip(*map(df.get, df))])

0    (1, 2, 3.0)
1    (3, 4, 5.0)
dtype: object
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...