pandas函数及方法

目录

1. weekday()和reindex()的组合

2. query方法 

3. eval方法

4. assign函数

5. merge函数

6. groupby函数

7. pd.to_datetime() 时间转换

8. df.dropna()

9. apply、applymap、map

10. 列删除操作 

11. 更改列名的几种方法

12. 查看数据类型,转换数据类型

13. 按某一列值拆分表格

14. 填充的几种方式

15. 读取文件参数,用来改变表格中日期格式: parse_date

16. 把series转换为list

17. 输出行索引和该行的内容

18. 其它操作


1. weekday()和reindex()的组合

datetime.weedak()方法的返回值为[0,6]之间的整数,分别代表周一到周日。在别的时区可能代表的是周日到周六。

#求出日期所在星期
sales['星期'] = sales['日期'].apply(lambda x:x.weekday()) + 1
sales = sales.reindex(columns=['日期','星期','销售额'])
#更改数据类型
sales['日'] = sales['日'].astype(str)
#转换数据类型
sales['日期'] = pd.to_datetime(sales['年月']+sales['日'], format='%Y年%m月%d')
#更改列名
sales.drop(columns=['年月','日'], inplace=True)
#对日期排序
sales.sort_values(by='日期', inplace=True)

2. query方法 

pandas的query()方法是基于DataFrame列的计算代数式,对于按照某列的规则进行过滤的操作,可以使用query方法。

#单条件查询
df.query['A==1']
#多条件查询
df.query['A+B==1']
#引用外部变量
df.query['A+B==@x']
#其它用法
import pandas as pd
df = pd.DataFrame({'a':[1, 2, 3, 4, 5, 6],
                   'b':[1, 2, 3, 4, 5, 6],
                   'c':[1, 2, 3, 4, 5, 6]})
query_list = [1, 2]
df_2 = df.query('c not in @query_list')[['a', 'b']]

3. eval方法

使用eval()方法的好处是可以借助列名称进行运算,也可以进行列间的算术、比较、位运算等。eval 支持接收一个inplace参数,控制原地创建新变量或者返回新的dataframe。

#新增列
df.eval('D = (A+B) / C', inplace=True)
#使用局部变量
column_mean = df.mean(1)
result = df.eval('A + @column_mean')
#支持调用函数
from math import sin
df.eval('C=sin(A)')

4. assign函数

assign赋值新列时,一般用新列名=表达式的形式,其中新列名为变量的形式,所以不加引号(加引号时意味着是字符串)

#赋值常数列
df.assign(C=1)
#赋值已有可迭代对象
df.assign(C=[100,110])
#根据已有列赋值
df.assgin(C=df.A+df.B)

5. merge函数

pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
         left_index=False, right_index=False, sort=True,
         suffixes=('_x', '_y'), copy=True, indicator=False,
         validate=None)

6. groupby函数

df.groupby(
    by=None,
    axis=0,
    level=None,
    as_index: 'bool' = True,
    sort: 'bool' = True,
    group_keys: 'bool' = True,
    squeeze: 'bool' = <object object at 0x137ac9240>,
    observed: 'bool' = False,
    dropna: 'bool' = True,
)
  • 结合agg()函数对多个值进行计算

    #对不同字段进行计算
    .agg({'data1':'mean','data2':'sum','data3':'std'})
    
    #对同一个字段进行多次聚合计算
    #方法一:将这些函数作为列表传递
    df.groupby("dummy").agg({"returns":[np.mean,np.sum]})
    >>>
           returns          
           sum      mean
    dummy                    
    1      0.285   0.0285
    
    #方法二:将这些函数作为字典传递
    df.groupby('dummy').agg({'returns':{'Mean':np.mean,'Sum':np.sum}})
    >>>
           returns          
           Sum      Mean
    dummy                    
    1      0.285   0.0285
  • 与apply结合使用

    def top(x,n=5):
        return x.sort_values(by='tip',ascending=False)[-n:]
    
    tips.groupby('sex').apply(top)

7. pd.to_datetime() 时间转换

pandas.to_datetime(arg,errors ='raise',utc = None,format = None,unit = None )

  • to_datetime之后就可以用神奇的pandas.Series.dt.day(日)或者pandas.Series.dt.month(提取月)、pandas.Series.dt.date(年月日)
datetime_series = pd.Series(
...     pd.date_range("2000-01-01", periods=3, freq="D")
... )
>>> datetime_series
0   2000-01-01
1   2000-01-02
2   2000-01-03
dtype: datetime64[ns]
>>> datetime_series.dt.day
0    1
1    2
2    3
dtype: int64

8. df.dropna()

DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
 subset=['A','B']根据A,B列是否为空删除数据
 axis=0表示行,axis=1表示列

9.apply、applymap、map

  • 对数据框(DataFrame)的数据进行按行或按列操作时用apply()
#axis=1,表示按行对数据进行操作
df1.apply(lambda x :x.max()-x.min(),axis=1)
0    4
1    7
2    4
df1.apply(lambda x :x.max()-x.min(),axis=0)
sales1     4
sales2    12
dtype: int64
#将时间特征进行拆分和转化
data['year']=data['Date'].apply(lambda x:x.split('-')[0])
data['year']=data['year'].astype(int)
data['IsPromoMonth']=data.apply(lambda x:0 if x['PromoInterval']==0 else 1)
  • 对数据框(DataFrame)的每一个数据进行操作时用applymap(),返回结果是DataFrame格式

    ​
    df1.applymap(lambda x : 1 if x>0 else 0)
    
    ​

     

  • 要对Series的每一个数据进行操作时用map()

    df1.sales1.map(lambda x : 1 if x>0 else 0)

10. 列删除操作

删除列
del df['columns'] #改变原始数据
df.drop('columns',axis=1)#删除不改表原始数据,可以通过重新赋值的方式赋值该数据
df.drop('columns',axis=1,inplace=True) #改变原始数据

 11. 更改列名的几种方法

df = pd.DataFrame({'c1':[1, 2, 3], 'c2': [4, 5, 6]})
    print(df)

    df.columns = ['d1', 'd2']
    print(df)

    df.rename(columns={'d1': 'e1', 'd2': 'e2'}, inplace=True)
    print(df)

    df = df.rename(columns={'e1': 'f1', 'e2': 'f2'})
    print(df)

->     c1  c2
    0   1   4
    1   2   5
    2   3   6
       d1  d2
    0   1   4
    1   2   5
    2   3   6
       e1  e2
    0   1   4
    1   2   5
    2   3   6
       f1  f2
    0   1   4
    1   2   5
    2   3   6

12. 查看数据类型,转换数据类型

df.dtypes#查看各列数据类型
df[A].dtypes#查看A列数据类型
df[A].astype(int)#将A列数据类型转换为int

13. 按某一列值拆分表格

#第一步:调用pandas包
import pandas as pd
#第二步:读入文件
iris = pd.read_excel('./iris.xlsx')
# 第三步:获取class列表并去重
class_list = list(iris['class'].drop_duplicates())
#第四步:按照类别分文件存放数据
for i in class_list:
    iris1 = iris[iris['class']==i]
    iris1.to_excel('./%s.xlsx'%(i))

14. 填充的几种方式

#常数填充
df1.fillna(100,inplace=True)
#通过字典对列填充不同的常数
df1.fillna({0:10,1:20,2:30})
#填充方式为前项填充,填充个数为1,按行的前一个数进行填充
df2.fillna(method="ffill",limit=1,axis=1)
#填充方式为后项填充,填充个数为2,按列的前一个数进行填充
df2.fillna(method='bfill',limit=2,axis=0)

15. 读取文件参数,用来改变表格中日期格式: parse_date

parse_dates=True : 尝试解析index为日期格式;

parse_dates=[0,1,2,3,4] : 尝试解析0,1,2,3,4列为时间格式;

parse_dates=[[’考试日期’,‘考试时间’]] :传入多列名,尝试将其解析并且拼接起来,parse_dates[[0,1,2]]也有同样的效果;

parse_dates={’考试安排时间’:[‘考试日期’,‘考试时间’]},将会尝试解析日期和时间拼接起来,并将列名重置为‘考试安排时间’;

16. 把series转换为list

Series.tolist()

17. 输出行索引和该行的内容

df.iterrows( )函数:可以返回所有的行索引,以及该行的所有内容

for index,row in dataframe.iterrows():
  print index
  print row

18. 其它操作

#查看df的信息
df.describe()

#对值进行统计
df.value_counts()

#将nan替换为指定的数
df = df.fillna(value_to_replace_null)

#根据某列去重计数
df.drop_duplicates('列名').count()

#将某列设置索引
data.set_index('序号',inplace=True) 
 
#将索引设置为列
data['销售员'] = data.index

#空值统计
df.isnull.sum()

#导入数据集,将时间格式变为字符串类型
train=pd.read_csv(r'E:pythondatatrain.csv',dtype={'StateHoliday':pd.np.string_})

#删除指定值所在的行
data =  data.drop(index = data[(data.ZH_Term_len == 0)].index.tolist())

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>