gpt4 book ai didi

python - Pandas 将列分成两部分并出现名称后缀错误

转载 作者:行者123 更新时间:2023-12-01 04:41:55 24 4
gpt4 key购买 nike

我有一个 pandas 数据框,一列是温度(人类),但值是混合的,摄氏度和华氏度,我想将此列分成两列(保留原始列)

#C Temp will be added to the end of df 
df = df.join(df.Temp.apply(lambda x: np.nan if x > 43 else x))

#F Temp will be added to the end of df
df = df.join(df.Temp.apply(lambda x: np.nan if x < 43 else x))

我以为df.Temp.apply(lambda x: np.nan if x < 43 else x)将返回一个系列,该系列将连接到 df 的末尾,但我收到此错误

ValueError: columns overlap but no suffix specified: Index([u'Temp'], dtype='object')

最佳答案

问题在于,在调用 join 时动态计算的 Series 的隐式 name 属性也将被'Temp' 因为它是从该列派生的计算结果。由于 DataFrame 中已存在 'Temp',因此它会引发异常,表明它不知道您要使用哪种名称更改(通过后缀)来防止名称重叠。

您可以为 join 提供一个 rsuffix 参数,该参数会将给定字符串附加到来自操作数的列的名称中连接的(在本例中,是函数调用内的连接)。例如:

df = df.join(df.Temp.apply(lambda x: np.nan if x > 43 else x),
rsuffix='_Celsius')

在修改后的输出 DataFrame 中获取名为“Temp_Celsius”的列。如果您希望更改该列名称(或者您可以如果您不希望任何列都保留原始名称,请提供两者)。

但是,请注意,在使用 join 时,您总是省略任何 on 参数(联接条件)——这意味着您默认通过索引“联接”。实际上,您想要的只是简单地写入从旧列派生的新列,这使您有机会声明名称,例如:

df['Celsius'] = df.Temp.apply(lambda x: np.nan if x > 43 else x)

这是更好的选择,因为它更清楚地表达了您的意图,即不是加入而是创建一个专栏。此外,由于默认的连接方法是 'left',如果您碰巧有重复的索引,您可能最终会为左侧索引中的每个重复项连接多次,并且因为该索引是与右侧索引相同(因此也会有重复项),这可能意味着您会在每次连接时默默地错误地引入更多重复项。

您还可以选择使用 map 而不是 apply,因为在访问列时,您将使用 Series 对象。

关于python - Pandas 将列分成两部分并出现名称后缀错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30465551/

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