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

时间:2015-11-05 18:49:42

标签: python pandas dataframe concat

数据框df1包含Week列,MonSunTotal

以下是创建新数据框的3种方法' df2'来自df1中的列:

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']]

这些有何不同?在什么情况下每个都有利?

1 个答案:

答案 0 :(得分:0)

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

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毫秒

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

第二个选项:100个循环,最佳3:每循环743μs

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

第三种选择:100次循环,最佳3次:每次循环838μs

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