gpt4 book ai didi

Python 和 Pandas 对象赋值

转载 作者:行者123 更新时间:2023-12-01 00:08:15 30 4
gpt4 key购买 nike

我最近开始学习 python 进行数据分析,在尝试理解使用 pandas DataFrameSeries 时的某些对象分配情况时遇到问题。

首先,我知道更改一个对象的值不会更改在第一个对象中分配了值的另一个对象。典型的:

a = 7
b = a
a = 12

到目前为止,a = 12b = 7。但在使用 Pandas 时我遇到以下情况:

import pandas as pd
my_df = pd.DataFrame({'Col1': [2, 7, 9],'Col2': [1, 6, 12],'Col3': [1, 6, 9]})

pd_colnames = pd.Series(my_df.columns.values)
list_colnames = list(my_df.columns.values)

现在,这两个对象包含相同的文本,一个为 pd.Series,第二个为 list。但如果我更改某些列名称,值就会更改:

>>> my_df.columns.values[0:2] = ['a','b']

>>> pd_colnames
0 a
1 b
2 Col3
dtype: object

>>> list_colnames
['Col1', 'Col2', 'Col3']

有人可以解释一下为什么使用内置的 list 值没有改变,而使用 pandas.Series 修改数据框时值发生了变化?

我该怎么做才能避免 pandas.Series 中出现这种行为?我有一个数据框架,其中的列名称有时需要使用英语,有时需要使用西类牙语,并且我希望能够将两者保留为 pandas.Series 对象,以便与它们进行交互.

最佳答案

这是因为 list() 正在 list_colnames = list(my_df.columns.values) 中创建一个新对象(副本)。这很容易测试:

a = [1, 2, 3]
b = list(a)
a[0] = 5
print(b)
---> [1, 2, 3]

创建该副本后,list_colnames 与初始 df(包括列名称数组)完全分离。

相反,my_df.columns.values 使您可以访问列名称的基础 numpy 数组。您可以使用 print(type(my_df.columns.values)) 看到这一点。当您从此数组创建 Series 时,无需创建副本,因此 Series 中的值仍链接到 my_df 的列名称(它们是同一个对象)。

关于Python 和 Pandas 对象赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59803704/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com