Объедините фреймы данных, убедившись, что логическое значение не преобразуется в целое число - PullRequest
1 голос
/ 29 мая 2020

У меня есть df1 и df2, которые я хочу объединить в один фрейм данных в l oop. 2 кадра данных идентичны. Df1 выглядит так

id booleanValue
0     True
1     False

df2 выглядит так

id booleanValue
2     True
3     np.nan

Я сделал

total_df = pd.Dataframe()
total_df = pd.concat([total_df, df1], ignore_index=True, sort=False)

Я надеялся получить

id booleanValue
0     True
1     False
2     True
3     NaN

но я получил

id booleanValue
0     0.0
1     1.0
2     0.0
3     0.0

Есть ли способ конкатенации, чтобы логическое значение не преобразовывалось в целое число, а np.nan оставался как np.nan?

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Ваше решение работает нормально, требуется только обновление pandas, потому что Nullable Boolean Data Type работает с pandas 1.0.0+:

df1['booleanValue'] = df1['booleanValue'].astype('boolean')
df2['booleanValue'] = df2['booleanValue'].astype('boolean')

total_df = pd.concat([df1, df2], ignore_index=True, sort=False)
print (total_df.dtypes)
id                int64
booleanValue    boolean
dtype: object

print (total_df)
   id  booleanValue
0   0          True
1   1         False
2   2          True
3   3          <NA>

Решение, если не преобразовать в boolean - получить object dtype:

total_df = pd.concat([df1, df2], ignore_index=True, sort=False)
print (total_df)
   id booleanValue
0   0         True
1   1        False
2   2         True
3   3          NaN

print (total_df.dtypes)
id               int64
booleanValue    object
dtype: object
0 голосов
/ 29 мая 2020

Вам необходимо concat оба фрейма данных df1 и df2. В вашей команде вы объединили total_df и df1.

Либо используйте df.append:

total_df = df1.append(df2)

   id booleanValue
0   0         True
1   1         False
0   2         True
1   3         NaN

OR

pd.concat, вот так:

total_df = pd.concat([df1,df2])

   id booleanValue
0   0         True
1   1         False
0   2         True
1   3         NaN
...