gpt4 book ai didi

python - 如何分配给非字符串 "name"或索引的列?

转载 作者:行者123 更新时间:2023-12-05 05:39:58 25 4
gpt4 key购买 nike

Pandas 的 DataFrames 有一个方法 assign ,它会为列赋值,它与 lociloc 的方法不同之处在于它返回一个带有新分配列的 DataFrame,而不修改任何浅拷贝或对相同数据的引用。

assign 方法使用参数名称来表示列名称(或 pandas 术语中的“索引”),如果处理的列名称是字符串,它可以正常工作,但 pandas 支持使用任意 python 对象作为列名。

假设我有一个以整数作为“名称”列的 DataFrame:

import pandas as pd
df = pd.DataFrame({
0 : [1,2,3],
1 : [4,5,6]
})

例如,我如何分配给 0 列?

这行不通:

df.assign(0 = df[[0]]+1)
SyntaxError: expression cannot contain assignment, perhaps you meant "=="?

这也不行:

df.assign(**{0:df[[0]]+1})
TypeError: keywords must be strings

现在,我可以使用直接分配或 loc,但它会修改基础数据 - 例如:

df_shallow_copy = df
df[[0]] = df[[0]] + 1

现在 df_shallow_copy 的值 [2,3,4]0 而不是 [1,2,3 ]

我也可以对所有列进行完整的深度复制,但这涉及复制内存中的数据并执行冗余操作:

df_shallow_copy = df
df = df.copy()
df[[0]] = df[[0]] + 1

如何在不生成冗余深拷贝且不潜在地修改其他对象的情况下分配给列?

最佳答案

您可以通过这样的重命名来回避整数关键字问题:

df.rename(columns={0:'tmp'}).assign(tmp=lambda x: x['tmp']+1).rename(columns={'tmp':0})

0 1
0 2 4
1 3 5
2 4 6

这对您的用例有用吗?

关于python - 如何分配给非字符串 "name"或索引的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72535853/

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