为了账号安全,请及时绑定邮箱和手机立即绑定

分配给 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 关注
  • 197 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号