最近做比赛,有时候需要造出新的特征,而这次遇到的问题是将一列数据往下顺移一位。同时将开头缺失的那一个数据用其他方式填充。
df['feature'].shift(1)向下顺移一位,这时第一位会置为nan,需要填充。
----------------------历史分割线-----------------
错误方案:
当时首先想到的是用loc来直接进行替换,也就是
i = len(dt) dt_new = pd.DataFrame() dt_new.loc[0, 'test'] = 0 dt_new.loc[1 : i - 1, 'test'] = dt.loc[0 : i - 2, 'data'] #这里会报错
愿望很美好,现实很残酷,这种方法会报错。
不太好的方案:
于是打算用循环的办法一个一个替换
dt_new = pd.DataFrame() dt_new.loc[0, 'test'] = 0 for i in range(len(dt) - 1): dt_new.loc[i + 1, 'test'] = dt.loc[i, 'data']
然而这个仅仅O(n)算法复杂度的东西,实际检验当用在几万行数据真的可以给你算好久好久,所以这个办法也弃用了。
正确方案:
pandas的dataframe,每一行是有序号的,直接进行替换的话,有时它会将相同序号的进行替换,这个是dataFrame的特性,有时会忽略从你选择的那一行开始替换,而直接从0开始。所以如果想用pandas来进行顺位移动的话,目前没有在API中找到便捷的方法。
最后终于想到了另外一个办法,就是转化为Numpy数组进行移动后,再转回dataFrame。
dt_v = dt['data'].values dt_v = dt_v.flatten() i = len(dt) dt_new_v = np.zeros(i) dt_new_v[0] = 0 dt_new_v[1 : i] = dt_v[0 : i - 1] #这里要注意Numpy数组截取[1, i]实际截取的是[1, i - 1]行! dt_new = pd.DataFrame() dt_new['test'] = dt_new_v
要注意Numpy数组截取[1, i]实际截取的是第[1, i - 1]行!
以上这篇Pandas 解决dataframe的一列进行向下顺移问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。
问题内容: 我了解pandas旨在加载完全填充的内容,但是我需要创建一个空的DataFrame然后逐行添加行。做这个的最好方式是什么 ? 我成功创建了一个空的DataFrame: 然后,我可以添加新行,并用以下字段填充字段: 它有效,但看起来很奇怪:(添加字符串值失败) 如何将新行添加到DataFrame(具有不同的列类型)? 问题答案:
如您所见,月份不按日历顺序排列。所以我创建了第二列来获取每个月(1-12)对应的月份号。从那里,我如何根据日历月份的顺序对此数据帧进行排序?
本文向大家介绍解决Pandas的DataFrame输出截断和省略的问题,包括了解决Pandas的DataFrame输出截断和省略的问题的使用技巧和注意事项,需要的朋友参考一下 我们看一个现象: Titanic_data.csv是kaggle上的泰坦尼克数据集,通过pandas读入到一个dataframe中,我们看看其前5行记录。输出结果如下: 可以看到,记录被分成了3段截断输出,如果想在一行输出,
问题内容: 在使用Python Pandas进行读写时,是否可以保留csv文件中列的顺序?例如,在此代码中 输出文件可能会有所不同,因为未保留列。 问题答案: 当前版本的Pandas(‘0.11.0’)中似乎存在一个错误,这意味着Matti John的答案将不起作用。如果您指定要写入文件的列,则它们将按字母顺序书写,而只是根据cols中的列表重新标记。例如,此代码: 导致以下(错误)输出: 您可以
本文向大家介绍Python中pandas dataframe删除一行或一列:drop函数详解,包括了Python中pandas dataframe删除一行或一列:drop函数详解的使用技巧和注意事项,需要的朋友参考一下 用法:DataFrame.drop(labels=None,axis=0, index=None, columns=None, inplace=False) 在这里默认:axis=
本文向大家介绍向Pandas中的现有DataFrame添加新列,包括了向Pandas中的现有DataFrame添加新列的使用技巧和注意事项,需要的朋友参考一下 Pandas 数据框是一种二维数据结构,即,数据以表格的形式在行和列中对齐。可以使用python dict,list和series等创建它。在本文中,我们将看到如何在现有数据框中添加新列。因此,首先让我们使用pandas系列创建一个数据框。