python - 在 for 循环中将数据分配给现有列
问题描述
我想使用 for 循环和函数将数据分配给数据框的一列,但我得到了常见的警告:
“SettingWithCopyWarning:试图在 DataFrame 中的切片副本上设置一个值”
我有一个数据框和三列日期(年、月和日),现在我想要一个将这三列转换为一列的新列。
我正在使用 for 循环将新数据分配给新列。我尝试使用copy()
,deepcopy()
如下所示,但它不起作用。
for i in range(100008):
df.new_col[i]=convert(df.year[i],df.mounth[i],df.day[i])
我尝试的而不是第二行:
df.new_col[i].copy()=convert(df.year[i],df.mounth[i],df.day[i])
deepcopy(df.new_col[i]) =convert(df.year[i],df.mounth[i],df.day[i])
我希望我的代码将值分配给列,并且确实如此(因为我中断了内核并调用了 df),但是这样做需要很多小时。我该如何解决这个问题?
解决方案
使用 pandas apply方法代替for
循环,该方法要快得多。
如果我正确理解你的代码,你想要这样的东西:
df['new_col'] = df.apply(convert2, axis=1)
其中convert2
定义如下:
def convert2(x):
return convert(x['year'], x['month'], x['day'])
这是因为,在将函数传递给 时apply
,该函数必须将数据帧的行或列(在本例中为一行,因为axis=1
)作为其参数。
convert2
或者,您可以使用lambda
函数来代替定义:
df['new_col'] = df.apply(lambda x : convert(x['year'], x['month'], x['day']), axis=1)
推荐阅读
- c++ - cmake链接模板类给出未定义的参考
- swift - @State 变量似乎在 SwiftUI 中被错误触发
- python - 将 1 个 pandas 数据帧附加到另一个内部循环
- r - 如何从雅虎财经加载多个股息数据?
- google-colaboratory - google colaboratory如何缩小cell输出的大小?
- elm - Elm 的余数运算符是什么
- java - 如何在Java中拆分字符串并比较是否相等?
- javascript - 如何将物体隐藏在立方体孔中?
- javascript - 当表单上有未填写的字段时,如何不将值设置为 Google 工作表?
- c++ - 计数输出不正确/尝试使用开放寻址创建 HashTable/Set 时遇到困难