亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

分配給 DataFrame 不起作用但 dtypes 已更改

分配給 DataFrame 不起作用但 dtypes 已更改

慕妹3146593 2021-12-17 15:58:26
分配給 DataFrame 不起作用,但 dtypes 已更改。數據科學的新手,我想將 分配target_frame給empty_frame,但它在再次分配之前不起作用。并且在分配過程中,dtypesofempty_frame已從int32變為float64并最終設置為int64。我嘗試將我的模型簡化為下面的代碼,它們有同樣的問題。import pandas as pdimport numpy as npdataset = [[[i for i in range(5)], ] for i in range(5)]dataset = pd.DataFrame(dataset, columns=['test'])  empty_numpy = np.arange(25).reshape(5, 5)empty_numpy.fill(np.nan)# Solution 1: change the below code into 'empty_frame = pd.DataFrame(empty_numpy)' then everything will be fineempty_frame = pd.DataFrame(empty_numpy, columns=[str(i) for i in range(5)])series = dataset['test']target_frame = pd.DataFrame(list(series))# Solution 2: run `empty_frame[:] = target_frame` twice, work fine to me.# ==================================================================# First try.empty_frame[:] = target_frameprint("="*40)print(f"Data types of empty_frame: {empty_frame.dtypes}")print("="*40)print("Result of first try: ")print(empty_frame)print("="*40)# Second try.empty_frame[:] = target_frameprint(f"Data types of empty_frame: {empty_frame.dtypes}")print("="*40)print("Result of second try: ")print(empty_frame)print("="*40)# ====================================================================但是當我第一次嘗試時它不起作用。這個問題有兩種解決方案,但我不知道為什么:正如我在我的代碼中展示的那樣,在一次運行中嘗試兩次分配。創建時刪除列的名稱empty_frame。我想弄清楚兩件事:為什么empty_frame的數據類型改變了。為什么我的代碼中顯示的解決方案可以解決這個分配問題。
查看完整描述

1 回答

?
絕地無雙

TA貢獻1946條經驗 獲得超4個贊

如果我正確理解你的問題,那么當你創建 empty_numpy 矩陣時你的問題就開始了。我最喜歡的解決方案是使用empty_numpy = np.empty([5,5])代替(這里的默認 dtypes 是 float64)。那么“第一次嘗試的結果:”是正確的。它的意思是:


import pandas as pd

import numpy as np


dataset = [[[i for i in range(5)],] for i in range(5)]

dataset = pd.DataFrame(dataset, columns=['test'])  


empty_numpy = np.empty([5,5])

# here you may add empty_numpy.fill(np.nan) but it's not necessary,result is the same


empty_frame = pd.DataFrame(empty_numpy, columns=[str(i) for i in range(5)])


series = dataset['test']

target_frame = pd.DataFrame(list(series))


# following assignment is correct then

empty_frame[:] = target_frame

print('='*40)

print(f'Data types of empty_frame: {empty_frame.dtypes}')

print('='*40)


print("Result of first try: ")

print(empty_frame)

print("="*40)

或者只是將 dtype 屬性添加到您的 np.arrange 調用中,就像這樣:


empty_numpy = np.arange(25, dtype=float).reshape(5, 5)

然后它也可以工作(但有點無聊;o)。


查看完整回答
反對 回復 2021-12-17
  • 1 回答
  • 0 關注
  • 189 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號