df= pd.DataFrame() 创建一个DataFrame对象 df.values 返回ndarray类型的对象 df.index 获取行索引 df.columns 获取列索引 df.axes 获取行及列索引 df.T 行与列对调 df. info() 打印DataFrame对象的信息 df.head(i) 显示前 i 行数据 df.tail(i) 显示后 i 行数据 df.describe() 查看数据按列的统计信息。建议结合pd.set_option('display.float_format', lambda x: '%.3f' % x),设置显示格式。 dispaly(df.head()) 重命名: df.rename({'oldcol':'newcol'}, axis=1, inplace=True)
df.loc[行索引,列索引] df.loc[行索引:行索引,列索引:列索引] df.iloc[行号,列号] df.iloc[行号:行号,列号:列号]
df[‘new column’]= 10 加了一个新列,该列值全为10
A、iloc按行号和列号取数据。注意:默认初始行号列号从行0、列0开始。 B、loc按行标签和列标签取数据。
用loc: 1、想取index= 74,columns=‘price’,交叉下的那个位置的数据: index为df的index
df.loc[74,'price']用iloc: 1‘、假如1的这个位置的数据在行号=74,列号=3的位置吗,也可这样写:
df.iloc[74,3]用loc: 1、取index为74-80,columns为’price’这一区域的值
df.loc[74:80,'price']2、取index为74-80,columns为’price’-'income’这一区域的值
df.loc[74:80,'price':'income']注意[74:80, ]冒号后面的值取不到,只能取到79。
用iloc: 同样实现上面的小功能。假如’price’为列3,'income’为列4。接下来用iloc实现: 1’、
df.iloc[74:80,3]2’、
df.iloc[74:80,3:5]#注意是5 只取到4还可以取反筛:
df1=df1[~df1['B'].isin([0])] #通过~取反,选取不包含数字0的行df= df.reset_index(drop=True) drop=True丢掉原来的索引
melbourne_features=[‘Rooms’, ‘Bathroom’, ‘Landsize’, ‘Lattitude’, ‘Longtitude’] X= melbourne_data[melbourne_features]
df['pid'].nunique()
参数说明: labels 就是要删除的行列的名字,用列表给定 axis 默认为0,指删除行,因此删除columns时要指定axis=1; index 直接指定要删除的行 columns 直接指定要删除的列 也可以用 del df['该列名'] inplace=False,默认该删除操作不改变原数据,而是返回一个执行删除操作后的新dataframe; inplace=True,则会直接在原数据上进行删除操作,删除后无法返回。
因此,删除行列有两种方式: 1)labels=None,axis=0 的组合 2)index或columns直接指定要删除的行或列
https://blog.csdn.net/songyunli1111/article/details/79306639
逐差df.diff()
1、其实是经过了两个步骤,首先会执行: df.shift() 然后再将该数据与原数据做差,即: df-df.shift()
2、函数原型: DataFrame.diff(periods=1, axis=0)
3、参数: periods:移动的幅度,int类型,默认值为1。 axis:移动的方向,{0 or ‘index’, 1 or ‘columns’},如果为0或者’index’,则上下移动,如果为1或者’columns’,则左右移动。
4、返回值 diffed:DataFrame类型
5、应用:仅在某个列上做差 假如x是一个天级别的收入指标,x为历史一年每天的收入。 默认值,今天比昨天增加的,日环比:df['inc_x]= df['x'].diff() 周环比:df['inc_x']= df['x'].diff(7)
假如df有一列为日期,想讲日期设置为行索引:test= df.set_index('date')
pd.to_datetimedf['date']= pd.to_datetime(df['date'],format="%Y-%m-%d") formate格式根据自己的日期格式设置。
如object转为类别类型。df['description']= df['description'].astype('category')
加入周期性为周一、周二、…周日这种。 加入df[’‘week’]:
""" 周期性 """ def dateToweek(x): week= x.isoweekday() return week df['wenk']= df['date'].apply(dateToweek)缺失值:nan
该列缺失值数量:df['column'].isnull().sum() 非缺失值数量:df['column'].count()
各列的: df.isnull().sum() #sum有个默认参数axis= 0 #一个列一个值
各行的:df.isnull().sum(axis= 1)
df.isnull.sum().sum() #只是一个值
如,统计每天各班各课程的签到人数:
df.groupby(['date','class','course'], as_index=False)['stuNo'] .agg({'count'}).reset_index() df.rename({'count':'qiandaorenshu'}, axis=1, inplace=True)如果有多个统计,可以在agg({‘count’,‘sum’,‘min’,‘max’,‘value_counts’})写多个。
value_counts: 分组后,统计各组中统计各组中某列的各取值的数目 如,某电商某商品每天有多个价格,统计‘price’列有多少种价格:
#分组后,统计各组中某列的各取值数目 df.groupby('key1')['price'].value_counts() #Series #展开: df.groupby('key1')['price'].value_counts().unstacks() # 等价于 df.groupby('key1')['price'].agg({'value_counts'}).reset_index()生成从0开始,0、1、2…这样的索引:df.reset_index(drop=True, inplace=True) drop=True:抛弃之前的索引
假如dataframe有一列为name,df[‘name’]值为:四医大医院,空军工程大学,三医大医院,西安电子科技大学,粥游记… 列很大 目标:把带有’医院’的统一命名为’医院’,把带有‘大学’的统一命名为‘大学’,其他的不做转换。
name_list= df['name'].values i= 0 for name in name_list: if '医院' in name: name_list[i]= '医院' elif '大学' in name: name_list[i]= '大学' else: pass i +=1再打印 df[‘name’]就会发现值改变了。更改name_list会更改df[‘name’],因为是浅复制。
