python - Pandas .shift 函数产生一个“'float'对象没有属性'shift'”,'发生在索引0')
问题描述
我正在尝试使用非常复杂的 if 语句在 pandas 数据框中创建一个新列(为了清楚起见,我在下面对其进行了简化)。我不断收到错误消息:(“'float' 对象没有属性 'shift'”,'发生在索引 0')。我环顾堆栈/互联网,并没有为我的解决方案找到一个很好的答案。一些答案涉及将 .shift 从函数中取出,但是,由于我正在编写的 if 语句的复杂性,我需要将它放在函数中。
我在下面附上了一张图片,详细说明了我最终希望该功能做什么。我相信它比我能用文字描述它更好地解释它。任何帮助或指导将不胜感激。
如果您有任何问题或者我可以澄清任何事情,请告诉我!
代码示例
df=pd.read_csv(file)
def ubk (df):
x = df['k_calc'].shift(1)
if x <90 :
return 1
elif x >90:
return 2
df['test'] = df.apply(ubk,axis = 1)
解决方案
如果需要,您可以传递其他参数apply
。在这种情况下,您可以根据需要传递 maindf
和您的ubk
句柄/处理它。我不知道您的确切目的ubk
,所以我只是修改ubk
以完成您为 column 描述的内容test
。看来您的逻辑效率不高,但您可能有自己的理由使用它。所以,这取决于你。
样本数据:
In [301]: df
Out[301]:
lowest_low k_calc d_cal
0 9.07 75.0000 NaN
1 9.07 79.7297 NaN
2 9.07 92.5675 NaN
3 9.07 66.2116 78.3772
函数和调用apply
以创建test
具有条件的列:如果前一个单元格k_calc < 90
返回 1,则> 90
返回 2,如下所示
def ubk (s, m_df):
x = m_df['k_calc'].shift(1)[s.name]
if x <90 :
return 1
elif x >90:
return 2
df['test'] = df.apply(ubk, axis=1, args=(df,))
Out[304]:
lowest_low k_calc d_cal test
0 9.07 75.0000 NaN NaN
1 9.07 79.7297 NaN 1.0
2 9.07 92.5675 NaN 1.0
3 9.07 66.2116 78.3772 2.0
推荐阅读
- sql - 在 oracle SQL 中保留顺序
- javascript - 未捕获的类型错误:无法读取 null javascript 的属性“appendChild”
- php - 如何访问具有日文和英文名称的文件夹的路径,并在 localhost 中有一些空格?
- python - 浏览文件 Tkinter 后恢复 <_io.BufferedReader name='Path'> 中的路径
- android - 如果在更新到 android studio 3.4.0 后在 xml 中自定义数据绑定类,则此处不允许使用属性类
- tensorflow - 回归问题:如何解决高小数输入特征的问题
- emotion - 条件关键帧不工作,而其他属性工作正常。前任。动画不工作,而字体大小工作正常
- javascript - 在不使用“缩放”的情况下调整 FabricJS 中的多边形、折线、线的大小
- c# - 在父方法中使用子属性
- javascript - 数组中的值如何随 Jquery 移动?