【问题标题】:Python Pandas Dataframe: Fast way to clean and manipulate data?Python Pandas Dataframe:清理和操作数据的快速方法?
【发布时间】:2021-04-23 18:53:51
【问题描述】:

我有多个时间序列数据框,我必须不断地做同样的事情,例如: 命名列、删除列、添加列、对列执行操作、对列执行 numpy.select 操作、删除列(最近我一直在使用第二个数据框和现在不需要的列)。

我是否可以创建一个函数来执行这些操作,而无需继续复制和粘贴代码来准备好我的数据?

略伪代码示例:

清洁

cols = ['date','open','high','low','close','volume']
df = pd.read_csv('data.csv',sep='\t',names=cols)
dcol=['volume']
df.drop(dcol,axis=1,inplace=True)

多个

df.insert(loc=5,column='name1',value=(df['operation']-df['operation']))

第二个df(用于隐藏主df的值)

df2 = df.copy()

同样,这些中的多个

df2.insert(loc=6,column='name2',value=(df['operation']-df['operation']))

使用 numpy 从 df2 中选择值以将它们插入到主 df 中

import numpy as np
conditions = [(cond1),(cond2)]
values1 = [(value1),(value2)]
values2 = [(value1),(value2)]
values3 = [(value1),(value2)]

# and finally three of these
df['randomname'] = np.select(conditions,values1)

那么,有没有一种快速的方法来做到这一点?或者我只需要靠自己的力量振作起来……

【问题讨论】:

标签: python pandas dataframe data-manipulation data-cleaning


【解决方案1】:

完成!所以,我们想创建函数来完成我们乏味的任务,然后在函数中使用 df.pipe()。 (我在操作上再次使用伪代码)

我的 csv 文件的标准

(此处不使用函数或管道)

cols = ['date','open','high','low','close','volume']
df = pd.read_csv('yourdata.csv',sep='\t',names=cols)

插入列和任意数量的列

def insert_cols(data):
    data.insert(loc=6,column='yourCol',value=(data['a']-data['b']))

在函数中使用 numpy.select

def numpy_cols(data):
    conditions = [data(cond1),data(cond2)]
    values1 = [data(value1),data(value2)]

    data['yourCol2'] = np.select(conditions,values1)

在函数中删除列

def drop_cols(data):
    dcols = ['volume','randomName']
    data.drop(dcols,axis=1,inplace=True)

最后,通过管道将函数应用到df

(和其他格式相同的dfs!)

df.pipe(insert_cols)
df.pipe(numpy_cols)
df.pipe(drop_cols)

有一种方法可以使用管道一次性应用所有功能,但我无法让它工作。

我使用了这些网站,第一个是它的点击:

https://data-flair.training/blogs/pandas-function-applications/

https://towardsdatascience.com/using-pandas-pipe-function-to-improve-code-readability-96d66abfaf8

https://www.kdnuggets.com/2021/01/cleaner-data-analysis-pandas-pipes.html

编辑: 我只使用了一个包含所有必要清理和操作的函数,然后将该函数通过管道传输到数据帧。工作方式相同,但在一行中执行(无需多次使用 .pipe())。

【讨论】:

    猜你喜欢
    • 2012-10-01
    • 2018-01-25
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    • 2017-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多