Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python数据帧修剪:pd.concat()vs.df.drop()vs.df2=df1[selectCols]_Python_Pandas_Dataframe_Concat - Fatal编程技术网

Python数据帧修剪:pd.concat()vs.df.drop()vs.df2=df1[selectCols]

Python数据帧修剪:pd.concat()vs.df.drop()vs.df2=df1[selectCols],python,pandas,dataframe,concat,Python,Pandas,Dataframe,Concat,数据框df1包含列Week,Mon:Sun,Total 以下是从df1中的列创建新数据帧“df2”的3种方法: df2 = pd.concat( [df1.Sun,df1.Mon, df1.Tues, df1.Weds, df1.Thurs, df1.Fri, df1.Sat], axis=1) df2 = df1.drop(['Week', 'Total'], axis=1) df2 = df1[['Sun','Mon','Tues','Weds','Th

数据框
df1
包含列
Week
Mon
Sun
Total

以下是从df1中的列创建新数据帧“df2”的3种方法:

df2 = pd.concat(
    [df1.Sun,df1.Mon, 
    df1.Tues, df1.Weds,
    df1.Thurs, df1.Fri,
    df1.Sat], axis=1)

df2 = df1.drop(['Week', 'Total'], axis=1)

df2 = df1[['Sun','Mon','Tues','Weds','Thurs','Fri','Sat']]

这些有什么不同?在什么情况下,每种方法都有优势?

我认为主要的优势是处理时间。我举了你们的例子,制作了一些样本数据,并使用库对它们进行了比较。看起来选项2和3要快得多。如果有很多列并且不方便把它们全部写出来,我会使用选项2,反之亦然。希望这有帮助

import pandas as pd
import numpy as np
daysOfWeek = ['Sun','Mon','Tues','Weds','Thurs','Fri','Sat', 'Week', 'Total']

df1 = pd.DataFrame()

for i in range(0, len(daysOfWeek)):
    #create array with random numbers
    df1[daysOfWeek[i]] = np.random.randint(0,10,500)
print(df1.head())
第一个选项:100个回路,每个回路3:1.01 ms的最佳值

%%timeit -n 100
df2 = pd.concat(
    [df1.Sun,df1.Mon, 
    df1.Tues, df1.Weds,
    df1.Thurs, df1.Fri,
    df1.Sat], axis=1)
df2 = df1.drop(['Week', 'Total'], axis=1)
df2 = df1[['Sun','Mon','Tues','Weds','Thurs','Fri','Sat']]
第二个选项:100个回路,每个回路最好为3:743µs

%%timeit -n 100
df2 = pd.concat(
    [df1.Sun,df1.Mon, 
    df1.Tues, df1.Weds,
    df1.Thurs, df1.Fri,
    df1.Sat], axis=1)
df2 = df1.drop(['Week', 'Total'], axis=1)
df2 = df1[['Sun','Mon','Tues','Weds','Thurs','Fri','Sat']]
第三个选项:100个回路,每个回路最好为3:838µs

%%timeit -n 100
df2 = pd.concat(
    [df1.Sun,df1.Mon, 
    df1.Tues, df1.Weds,
    df1.Thurs, df1.Fri,
    df1.Sat], axis=1)
df2 = df1.drop(['Week', 'Total'], axis=1)
df2 = df1[['Sun','Mon','Tues','Weds','Thurs','Fri','Sat']]

这是R还是Python?如果您附加了一些示例或数据帧的一部分,那么测试这些方法会更容易,但不是第一个;它又长又丑,效率低下。其他两个取决于具体情况,例如,您可能选择相对较少的列或删除相对较少的列,如上面的示例所示。您可能还希望向代码读者明确选择(或删除)哪些列。我怀疑它们之间在内存使用方面有什么区别。同样,
drop
可以配置为通过传递
errors='ignore'
来删除可能存在或可能不存在的列。df2到底是什么?在这一步之前是否已初始化?