#python #pandas
#питон #панды
Вопрос:
Я просто столкнулся с этим странным поведением у Панд и надеялся, что кто-нибудь сможет пролить на это некоторый свет. У меня есть фрейм данных с двумя столбцами, один из которых имеет целочисленный тип, а другой-с плавающей запятой. Затем я хочу получить значения из первой строки, первого столбца. Есть два способа сделать это: либо сначала запросить первую строку .iloc[0]
, а затем получить запрошенный столбец ['X']
, либо сначала получить столбец, а затем первую строку этого. Первый (первая строка) изменит тип данных значения с int на float (нежелательное поведение), но первый столбец сохранит тип данных. Это ошибка, или я упускаю какие-то нюансы Панд?
Вот пример кода для воспроизведения поведения
import numpy as np import pandas as pd print(np.__version__, pd.__version__, 'n') # Create two data sets, one that is integer and one that is floating point. data1 = np.arange(1, 5, dtype=int) data2 = np.arange(2, 6, dtype=float) df = pd.DataFrame(data={'X': data1, 'Y': data2}) # Verify the data types in the dataframe print(df.dtypes, 'n') # Get the column first, then the row. We get the expected integer type print('Column first: ', type(df['X'].iloc[0])) # Get the row first, then the column. we get a float instead of integer. print('Row first: ', type(df.iloc[0]['X']))
с результирующим выводом в моей системе
1.21.2 1.3.4 X int32 Y float64 dtype: object Column first: lt;class 'numpy.int32'gt; Row first: lt;class 'numpy.float64'gt;
Ответ №1:
Ряд имеет уникальный тип, сначала разрезая строку, вы возвращаете ряд строки, и значения вводятся с плавающей точкой, как и во втором столбце. Значение int отображается как плавающее. Такое поведение также происходит при вставке NaN в серию int.
Сначала разрезав столбец, вы сохраняете тип int.
Тем не менее, есть третий способ получить то, что вы хотите: нарежьте оба сразу
df.iloc[0,0]
Комментарии:
1. Идеальный. Я не оценил, что первый фрагмент транслировался в соответствии с типами в новой временной серии.