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

分配给 DataFrame 不起作用,但 dtypes 已更改。


数据科学的新手,我想将 分配target_frame给empty_frame,但它在再次分配之前不起作用。并且在分配过程中,dtypesofempty_frame已从int32变为float64并最终设置为int64。


我尝试将我的模型简化为下面的代码,它们有同样的问题。


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.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 fine

empty_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_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)



# Second try.

empty_frame[:] = target_frame


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

print("="*40)


print("Result of second try: ")

print(empty_frame)

print("="*40)

# ====================================================================

但是当我第一次尝试时它不起作用。

这个问题有两种解决方案,但我不知道为什么:

  • 正如我在我的代码中展示的那样,在一次运行中尝试两次分配。

  • 创建时删除列的名称empty_frame

我想弄清楚两件事:

  1. 为什么empty_frame的数据类型改变了。

  2. 为什么我的代码中显示的解决方案可以解决这个分配问题。


慕妹3146593
浏览 198回答 1
1回答

绝地无双

如果我正确理解你的问题,那么当你创建 empty_numpy 矩阵时你的问题就开始了。我最喜欢的解决方案是使用empty_numpy = np.empty([5,5])代替(这里的默认 dtypes 是 float64)。那么“第一次尝试的结果:”是正确的。它的意思是: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.empty([5,5])# here you may add empty_numpy.fill(np.nan) but it's not necessary,result is the sameempty_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 thenempty_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)或者只是将 dtype 属性添加到您的 np.arrange 调用中,就像这样:empty_numpy = np.arange(25, dtype=float).reshape(5, 5)然后它也可以工作(但有点无聊;o)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python