文章目录
对于列的操作
- 在groupby sum 之后最好要reset_index()
df1 = df.groupby([col1, col2]).sum()
df2 = df.groupby([col1, col2]).sum().reset_index(drop)
df1[col] += 'asdf'
df2[col] += 'asdf'
如果在df这张表很大的情况下,df1会花费很长的时间(我遇到的情况为1-2s),而df2只会花费很短的时间(0.00x s)
- concat
拼接很好用
df3 = pd.concat([df1, df2], ignore_index=True)
- 取特定的行
df = df[(df[col]1 == '') | ((df[col2] & df[col3]))]
这里主要是要注意 | & 的用法,必须要加括号
- apply调用
对于两列之间的操作:
df[[col1, col2]].apply(lambda x: x[0] op x[1])
例:
df['c'] = df[['a', 'b']].apply(lambda x: x[0] + x[1])
对于调用函数:
df.apply(lambda x: func(x[col1], x[col2], ...))
例:
def my_func(args_1, args_2)
df.apply(lambda x: my(x[col1], x[col2]))
对应apply这个函数,有几个参数很有用:
- axis:这个参数可以针对每一行或者是每一列来执行函数
- result_type:这个函数可以指定返回的结果的类型
- 在进行类似于drop_duplicates, drop 之类的带有inplace参数的操作时,如果的确要修改原来的DataFrame,并且后续还要对DataFrame进行操作,那么不要使用下面这种方式:
df = df.drop(col1, axis=1)
df[col2] = ... //操作df里面的东西
最好使用inplace参数
df = df.drop(col1, axis=1, inplace=True)
- 想要修改dataframe的单元格的话,最好使用loc这个函数
df.loc[哪一行,哪一列] = ???
df.loc[[哪些行]]
df.loc[bool] #取出满足条件的行