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到底是什么?在这一步之前是否已初始化?